Compare commits

...

341 Commits

Author SHA1 Message Date
topjohnwu
4040a0242f Update app changelog 2019-05-01 14:11:10 -04:00
topjohnwu
781ec810d9 Remove unnecessary applets of MagiskInit 2019-05-01 13:55:59 -04:00
topjohnwu
9e90a71c04 Update installation instruction for latest release 2019-05-01 13:50:10 -04:00
zertyuiop
5571714b26 Update Russian translation
Added missing strings
2019-05-01 13:49:59 -04:00
xorcan
e0d1f02ef5 Update strings.xml 2019-05-01 13:49:51 -04:00
xorcan
1b729e5ff2 updade Turkish
latest
2019-05-01 13:49:44 -04:00
davidtrpcevski
51e587d4e8 Add full Macedonian translation 2019-05-01 13:49:34 -04:00
topjohnwu
ac9c55dbc1 Add info regarding signing certificates
Close #961
2019-05-01 03:27:06 -04:00
topjohnwu
0893ac3141 No more old module exists 2019-05-01 01:23:07 -04:00
topjohnwu
fb40e96917 Update outputs 2019-05-01 01:22:37 -04:00
topjohnwu
4ca25f74c6 More robust mounting scripts
Close #1376
2019-04-30 17:35:58 -04:00
osm0sis
7fda917b86 Fix addon.d error OUTFD derp 2019-04-30 17:09:25 -04:00
osm0sis
e6bd5f2c40 Display error if actual Magisk addon.d script cannot be run
- this would likely occur on an FDE device with block map OTAs (a la LineageOS) since they do not require/request decrypt
- for reference all other addon.d "v1" cases should work fine:
  1) FDE with openrecovery script works fine since it requests decrypt
  2) FBE with openrecovery script OR block map work fine since /data/adb remains accessible
2019-04-30 10:27:29 -04:00
topjohnwu
8a904ee384 Update native external dependencies 2019-04-30 01:31:07 -04:00
topjohnwu
00a9f18a1e Build with -Wall 2019-04-29 21:26:43 -04:00
topjohnwu
8d68ebb074 Revert ioctl rules 2019-04-29 21:25:57 -04:00
topjohnwu
5f53cfb4a9 Update sepolicy rules 2019-04-29 20:26:51 -04:00
topjohnwu
a2fa8d8be1 Stop fdsan complains 2019-04-29 20:04:39 -04:00
topjohnwu
70a3c78ebb Simplify magiskinit logging 2019-04-29 19:53:22 -04:00
topjohnwu
54d1207f92 Auto remove post_ota.sh 2019-04-24 01:59:47 -04:00
topjohnwu
003e44fb84 Remove requirement to use early-init daemon
We used to construct /sbin tmpfs overlay in early-init stage after
SELinux is properly initialized. However the way it is implemented
(forking daemon from magiskinit with complicated file waiting triggers)
is extremely complicated and error prone.

This commit moves the construction of the sbin overlay to pre-init
stage. The catch is that since SELinux is not present at that point,
proper selabel has to be reconstructed afterwards. Some additional
SEPolicy rules are added to make sure init can access magisk binaries,
and the secontext relabeling task is assigned to the main Magisk daemon.
2019-04-24 00:13:48 -04:00
topjohnwu
515f346dcc Monitor app_process
Some stupid Samsung ROMs will spawn multiple zygote daemons. Since we
switched to ptrace based process monitoring, we have to know all zygote
processes to trace. This is an attempt to fix this issue.

Close #1272
2019-04-22 16:36:23 -04:00
topjohnwu
6050c4e8ba Fix strings.xml 2019-04-21 21:01:49 -04:00
tarasyyyk
158af8819a added stub Ukrainian translation 2019-04-21 19:18:15 -04:00
tarasyyyk
7787bb31fa updated Ukrainian translation: 'Patch File' strings 2019-04-21 19:18:15 -04:00
cristisilaghi
a1fe3e7ccd Update Romanian 2019-04-21 19:18:04 -04:00
dark-basic
4316028b23 Update strings.xml
Restructured based on original string. New missing lines added
2019-04-21 19:17:56 -04:00
topjohnwu
f2b52755d6 Track all input devices with KEY_VOLUMEUP
This should in theory should support more devices for detecting the
volume up press on boot.

Close #1346
2019-04-21 19:09:08 -04:00
topjohnwu
f315c4416b Upgrade libsu 2019-04-19 01:07:39 -04:00
topjohnwu
4e7dafb0e4 Use bitset instead of vector 2019-04-13 02:43:43 -04:00
topjohnwu
a6395d35db Refactor with AS 3.5 2019-04-12 01:58:42 -04:00
Viktor De Pasquale
a028cd5cec Updated locations of nearly all files
This has been done in preparations for rewrite to kotlin and upcoming design changes.
Nothing should be broken but use caution.
2019-04-12 01:44:55 -04:00
Viktor De Pasquale
540000d26e Fixed butter knife not building with kotlin 2019-04-12 01:44:55 -04:00
Viktor De Pasquale
888c656aa8 Added kotlin support 2019-04-12 01:44:55 -04:00
topjohnwu
8d4c407201 Directly communicate with Activity
Since Android Q does not allow launching activities from the background
(Services/BroadcastReceivers) and our native process is root, directly
launch activities and use it for communication between native and app.

The target activity is not exported, so non-root apps cannot send an
intent to fool Magisk Manager. This is as safe as the previous
implementation, which uses protected system broadcasts.

This also workaround broadcast limitations in many ROMs (especially
in Chinese ROMs) which blocks the su request dialog if the app is
frozen/force stopped by the system.

Close #1326
2019-04-10 23:35:31 -04:00
topjohnwu
fdeede23f7 Don't build test APKs 2019-04-10 23:33:22 -04:00
topjohnwu
53c5ca59b6 Cleanup SuLogger 2019-04-10 18:09:41 -04:00
topjohnwu
679db97209 Always run su requests in new tasks 2019-04-10 18:05:19 -04:00
topjohnwu
fbdd72273e Restructure SuRequestActivity 2019-04-10 17:02:32 -04:00
topjohnwu
0165602515 More cleanups 2019-04-10 13:54:33 -04:00
topjohnwu
96127f8bd1 Lock orientation in SuRequestActivity
Fix #1302, close #1318
2019-04-10 05:36:02 -04:00
topjohnwu
0dbdf336d6 Update dependencies 2019-04-10 05:17:03 -04:00
topjohnwu
48879df2da Some cleanups 2019-04-10 05:15:20 -04:00
topjohnwu
b067a5bb13 Use root to launch su request Activity on Q 2019-04-10 05:03:26 -04:00
topjohnwu
4b54cf1288 Compile with Android Q SDK
We upgrade compileSdkVersion to Q, but keep targetSdkVersion as 28.
The reason is because targeting Q will no longer allow us to execute
native binaries in an app's private data, which Magisk Manager relies
a lot for performing stock boot image patches in non rooted environment.
For more information regarding this issue, check this link:
https://redd.it/b2inbu

Some workarounds has been discovered (https://github.com/termux/proot),
however for the time being there is no point to introduce these huge
hacks just for targeting Q, which we don't benefit anything.
2019-04-10 02:17:08 -04:00
topjohnwu
6128c24f96 Drastically improve module download service 2019-04-10 02:00:48 -04:00
topjohnwu
d9c58f307f Remove unused resources 2019-04-09 04:44:09 -04:00
Lukas Novotny
b521fbeeda Update Czech translation 2019-04-09 04:38:35 -04:00
Rom
d00a3b89f2 Update French translation 2019-04-09 04:38:23 -04:00
vvb2060
3d15518191 Update zh-rCN translation 2019-04-09 04:38:09 -04:00
Ingan121
9b6535fdf5 Update Korean translations 2019-04-09 04:37:58 -04:00
topjohnwu
e0424fdba3 Remove patch format options
Output format will be the same as input
2019-04-09 04:37:34 -04:00
Ian Macdonald
7481c53451 Update samsung.md 2019-04-08 21:07:36 -04:00
topjohnwu
7219947237 Update libsu
Close #1314
2019-04-08 21:05:11 -04:00
topjohnwu
b72004e9cc Move methods 2019-04-08 17:35:32 -04:00
topjohnwu
f187213568 Run update check service only in background 2019-04-08 17:35:32 -04:00
topjohnwu
fc0df84edd Keep track of foreground activity 2019-04-08 17:35:32 -04:00
topjohnwu
f24df4f43d Don't allow cloning root nodes
The root nodes are /system and /vendor. Adding new files into these
directories, although works on some devices, mostly bootloops on many
devices out there. So don't allow it, which also makes the whole magic
mounting logic much easier and extensible.
2019-04-08 12:30:57 -04:00
topjohnwu
dab32e1599 Use our own device nodes for mirrors 2019-04-08 01:40:04 -04:00
topjohnwu
bc286fd4d3 Upgrade Android Studio 2019-04-07 23:03:43 -04:00
topjohnwu
befe1a83b5 Use real system_root mirror 2019-04-07 14:22:45 -04:00
topjohnwu
82ea9db9fd Don't override arguments 2019-04-06 17:19:47 -04:00
topjohnwu
c5758b3f2d Update scripts 2019-04-06 13:04:17 -04:00
topjohnwu
ace3708c9c Update key combo for download mode 2019-04-06 04:45:51 -04:00
topjohnwu
fc5026d268 Add info regarding direct upgrades 2019-04-06 03:08:42 -04:00
topjohnwu
77fd0e54be Better wording 2019-04-06 03:05:41 -04:00
John Wu
24490e0ff5 Update samsung.md 2019-04-06 02:55:11 -04:00
topjohnwu
da3937ff4e Reboot after env_fix 2019-04-06 01:56:47 -04:00
topjohnwu
ebe1ab982e Add Samsung instructions 2019-04-06 01:25:11 -04:00
John Wu
98590cb00d Upload Samsung bootloader image 2019-04-05 23:35:00 -04:00
topjohnwu
ff95f634f0 Use release canary APK in stub 2019-04-05 21:07:59 -04:00
topjohnwu
ced9b4a8ee Default to beta channel if detected 2019-04-05 20:48:19 -04:00
topjohnwu
7af7910e78 Revert "Revert to old find boot order"
This reverts commit 5203886f0b.
2019-04-05 15:18:39 -04:00
vvb2060
a4f5d47e72 get_flags need before find_boot_image 2019-04-05 15:18:28 -04:00
topjohnwu
6953cc2411 Use separate flags for 64-bit 2019-04-05 15:17:59 -04:00
topjohnwu
6a0b2ddee9 Let stub APK respect canary builds 2019-04-05 07:15:54 -04:00
topjohnwu
24f5bc98d8 Add boot_complete trigger back
Samsung does not like running cmd before system services are started.
Instead of failing, it will enter an infinite wait on binder.
Move APK installation to boot complete to make sure pm can be run
without blocking process.
2019-04-05 07:00:30 -04:00
topjohnwu
5203886f0b Revert to old find boot order 2019-04-04 20:01:59 -04:00
topjohnwu
c10b376575 Support patching full ODIN firmware 2019-04-04 07:27:43 -04:00
topjohnwu
ceb21ced2b Small changes 2019-04-04 02:30:03 -04:00
topjohnwu
86789a8694 Add logging in magiskinit 2019-04-04 00:26:16 -04:00
topjohnwu
ca2235aee7 Update strings 2019-04-03 17:59:54 -04:00
topjohnwu
a385e5cd92 Use wrapper script on system with APEX
Thanks to moving libandroidicu.so to APEX runtime linker namespace,
we need a wrapper to link against libsqlite.so on Q
2019-04-03 17:25:47 -04:00
topjohnwu
0c7a95bdf6 Small net update 2019-04-03 01:01:18 -04:00
topjohnwu
036b5acf42 Update Markwon to 3.0.0 2019-04-02 23:58:19 -04:00
topjohnwu
056dafc59f Use R8 full mode
R8 FTW!
2019-04-02 16:32:40 -04:00
topjohnwu
a9c90718d6 Update some dependencies 2019-04-02 01:50:25 -04:00
topjohnwu
cc77a24502 Prevent accidental magiskinit execution
Close #1281
2019-04-01 17:14:18 -04:00
topjohnwu
71a91ac7a7 Boot to recovery if volume up key is held
Forseeing the future that more and more A only system-as-root devices
would have similar bootloader behavior as the latest Samsung devices
(that is, no ramdisk will be loaded into memory when booting from
the boot partition), a solution/workaround has to be made when Magisk
is installed to the recovery partition, making custom recoveries
unable to co-exist with Magisk.

This commit allows magiskinit to read input device events from the
kernel to detect when a user holds volume key up to toggle whether
system-as-root mode is enabled. When system-as-root mode is disabled,
magiskinit will boot with ramdisk instead of cloning rootfs from system,
which in this case will boot to the recovery.
2019-04-01 03:01:05 -04:00
topjohnwu
08a70f033a Add entrypoint to build test
Just for convenience, nothing special here
2019-04-01 02:46:09 -04:00
topjohnwu
1b0c36dbd5 Remove outdated comments 2019-03-31 15:40:55 -04:00
topjohnwu
91da1cf817 Make on_install happen earlier to allow more customization 2019-03-31 15:37:12 -04:00
topjohnwu
c577a9525d Remove simple mount mode
This mode is proven to have no difference than normal post-fs-data
module mounting. No reason to keep this code in the sources.
2019-03-31 15:10:01 -04:00
topjohnwu
0149b1368d Several improvements 2019-03-31 06:32:33 -04:00
topjohnwu
cd6bcb97ef Cleanup stuffs 2019-03-31 00:48:22 -04:00
topjohnwu
df4161ffcc Reboot to recovery when running as recovery 2019-03-30 06:49:29 -04:00
topjohnwu
7a133eaf03 Block vaultkeeper and flash_recovery service 2019-03-30 04:13:45 -04:00
topjohnwu
1cd45b53b1 Support recovery based Magisk
Some devices (mainly new Samsung phones we're talking here...) using
A only system-as-root refuse to load ramdisk when booted with boot
no matter what we do. With many A only system-as-root devices, even
though their boot image is kernel only, we can still be able to add
a ramdisk section into the image and force the kernel to use it as
rootfs. However the bootloader on devices like the S10 simply does
not load anything within boot image into memory other than the kernel.
This gives as the only option is to install Magisk on the recovery
partition. This commits adds proper support for these kind of scenarios.
2019-03-30 00:49:48 -04:00
topjohnwu
5b30c77403 Fix strings 2019-03-29 10:39:11 -04:00
Gozzwip
8248480d56 Translation done
Please change the name of the language to Azərbaycanca
2019-03-29 10:37:28 -04:00
Vladimír Kubala
345d992d39 Update Slovak translations 2019-03-29 10:36:47 -04:00
topjohnwu
a7f6afa4bc Add 7.1.1 changelog 2019-03-29 10:31:08 -04:00
topjohnwu
d22c7de79a Don't care minMagiskVersion
It will be sanitized by magiskbot anyways
2019-03-29 10:25:07 -04:00
topjohnwu
3eae9494ce Add 7.1.0 changelog 2019-03-28 09:53:05 -04:00
topjohnwu
be7e737253 Add a small notice for migration 2019-03-28 08:37:23 -04:00
topjohnwu
b6eb912dba Fix links in table of contents 2019-03-28 07:03:38 -04:00
topjohnwu
8049b08918 More precise new installer detection 2019-03-28 06:33:24 -04:00
Oliver Cervera
d1fa5be210 Update Italian translations
- added new strings from Welcome Activity
- misc fixes
2019-03-28 05:52:46 -04:00
Cristian Silaghi
fdbb1af02c Update Romanian language 2019-03-28 05:52:25 -04:00
topjohnwu
c85a5cae88 Update links 2019-03-28 05:45:58 -04:00
topjohnwu
649ef53409 Update many details in docs 2019-03-28 05:25:20 -04:00
topjohnwu
e784212283 Update tools docs 2019-03-28 04:54:06 -04:00
topjohnwu
66eb1078fe Update docs for module devs 2019-03-28 04:48:46 -04:00
topjohnwu
1c09b3642f Properly setup update flag in module installer 2019-03-27 22:20:39 -04:00
topjohnwu
d08b1a6639 Remove com.google.android.gms from default list
It seems that even adding this to the list doesn't 100% works on all
devices out there, and some even reported crashes on several Google
services. Disable it for now and do further investigations in the future.
2019-03-27 21:33:04 -04:00
topjohnwu
10f50e2401 Revert to old behavior on old MagiskHide versions 2019-03-27 20:43:38 -04:00
topjohnwu
8e9a7b25a1 Upgrade Android Studio 2019-03-27 18:31:50 -04:00
topjohnwu
4859ee2da9 Inject module-installer.sh if new format is detected 2019-03-24 06:20:57 -04:00
topjohnwu
b45db44ad9 Update transitions 2019-03-24 04:29:09 -04:00
topjohnwu
e25ce63872 Remove AppUtils 2019-03-24 02:16:19 -04:00
topjohnwu
162eeaa0a6 Improve repo adapter 2019-03-24 02:02:34 -04:00
topjohnwu
f36ce905aa Improve repo adapter
Fix #435
2019-03-23 23:18:26 -04:00
topjohnwu
8ac3aaf36c Rename Topic -> Event 2019-03-23 21:58:42 -04:00
topjohnwu
a199b0ace1 Use ZIPFILE instead of ZIP
The tool zip reads , we don't want it
2019-03-23 20:49:16 -04:00
topjohnwu
2f2108e4e8 Fix typo in module installer 2019-03-23 05:28:43 -04:00
topjohnwu
f5f7fd9132 Add com.android.google gms to default hide list
Close #1235
2019-03-23 04:39:34 -04:00
topjohnwu
f9ae4ab475 Add base Magisk module installer script 2019-03-23 04:27:36 -04:00
topjohnwu
8de03eef3f Allow modules to have custom uninstaller script 2019-03-23 03:50:55 -04:00
topjohnwu
8df942f96e Adjust scripting 2019-03-23 03:36:35 -04:00
topjohnwu
9bb2243b56 Switch to skip_mount instead of auto_mount
95%+ of existing modules enables auto mount (obviously).
Switching auto mount to opt-out makes more sense than opt-in as
in previous module format. The file 'auto_mount' will be ignored, and
the file 'skip_mount' will be checked to toggle the mounting behavior.

After scanning through the current Magisk Module Repo modules, no
modules are using custom bind mounting; all modules with auto mount
disabled have empty system folder, which means this change will not
affect any existing module.
2019-03-23 03:05:38 -04:00
topjohnwu
db06038548 Fix Magisk installation 2019-03-22 02:48:42 -04:00
topjohnwu
ecb33d3176 Cleanup scripts 2019-03-22 02:32:21 -04:00
topjohnwu
eae1c17738 Remove features before aborting 2019-03-22 02:01:36 -04:00
topjohnwu
ea55532e33 Copy busybox instead of bind mounting 2019-03-22 01:52:13 -04:00
topjohnwu
2a40cb60a9 Behave more sane in extreme conditions 2019-03-22 01:50:33 -04:00
topjohnwu
d371d017b7 Update dependencies 2019-03-22 00:49:55 -04:00
topjohnwu
1d9359d563 Fix additional setup 2019-03-20 03:20:02 -04:00
topjohnwu
945f88105f Support system-as-root devices with monolithic sepolicy 2019-03-18 04:54:15 -04:00
topjohnwu
957feca626 Limit sepolicy load to Android Q only
It seems both Android cancers, Samsung and Huawei devices, don't
like preloading sepolicy. For a temporary solution now is to limit
the sepolicy loading to Android Q only.
2019-03-16 17:15:48 -04:00
topjohnwu
c0447009db Allow entrypoint for rootfs construction simulation 2019-03-16 04:45:56 -04:00
topjohnwu
8893cbd64a Modularize MagiskInit 2019-03-15 14:46:30 -04:00
topjohnwu
f0240b1f06 Support Android Q new split sepolicy setup 2019-03-15 06:17:37 -04:00
topjohnwu
e476c18c99 Don't load sepolicy on Huawei devices
Of course, the cancer of Android, Huawei, has to do some f**king weird
modifications to the Linux kernel. Its kernel only accepts 1 single
policy load in its lifetime, a second load will result in ENOMEM error.
Since Huawei devices always use their own stupid ramdisk setup and not
system-as-root, not loading sepolicy is not a concern (for now).
2019-03-14 22:48:23 -04:00
topjohnwu
a1b5185ecb Make sure rootfs file selabels are correct
Android Q init assumes rootfs to always be on EXT4 images, thus
never runs restorecon on the whole root directory. This is an issue
because some folders in rootfs were set with special selabels in
the system partition, but when copying over to initramfs by magiskinit,
these labels will not be preserved.

So the solution is to relabel the files in rootfs with the original
context right? Yes, but rootfs does not allow security xattr to be set
on files before the kernel SELinux initializes with genfs_contexts.
We have to load our sepolicy to the kernel before we clone the root
directory from system partition, which we will also restore the selabel
in the meantime.

Unfortunately this means that for each reboot, the exact same policy
will be loaded to the kernel twice: once in magiskinit so we can label
rootfs properly, and once by the original init, which is part of the
boot procedure. There is no easy way to prevent init from loading
sepolicy, as init will refuse to continue if policy loading has failed.
2019-03-14 22:27:29 -04:00
topjohnwu
981e90cc32 Don't remove SafetyNet from hide list 2019-03-14 07:00:36 -04:00
topjohnwu
da0a72e8b0 Improve builtin selinux implementation 2019-03-14 06:34:22 -04:00
topjohnwu
b7e2e972c7 Support boot_img_hdr_v2 2019-03-13 16:51:22 -04:00
topjohnwu
650b2ce6b1 Fix config bugs 2019-03-13 15:25:53 -04:00
topjohnwu
ecf3d30349 Only show expansion when necessary 2019-03-13 08:15:02 -04:00
topjohnwu
15ddd0e284 More MagiskHide list UI improvements 2019-03-13 07:49:12 -04:00
topjohnwu
18ac6b270f Make Expandable more extensible 2019-03-13 06:12:02 -04:00
topjohnwu
3e35de9b39 Small UI improvements 2019-03-13 05:11:18 -04:00
topjohnwu
1e24c72c11 Use our own existing implementation 2019-03-13 01:37:35 -04:00
vvb2060
217564963d New MagiskHide UI 2019-03-12 17:20:08 -04:00
topjohnwu
f2f4649ab0 Don't crash when encounter unexpected XML input 2019-03-12 17:19:29 -04:00
Oliver Cervera
4395ffec5f Update it-it stub
Better wording!
2019-03-12 17:04:23 -04:00
topjohnwu
9a7a26407a Update build script 2019-03-12 17:01:37 -04:00
topjohnwu
5072a67807 Update AGP and R8 2019-03-12 16:53:07 -04:00
topjohnwu
dce0b6c05a Always detach all child threads before leaving 2019-03-12 16:48:01 -04:00
topjohnwu
a4a661bf34 Small code restructuring 2019-03-11 12:44:50 -04:00
topjohnwu
771e500468 Use dark theme by default 2019-03-11 07:39:01 -04:00
topjohnwu
7e3ff03109 Default to canary channel if running canary build 2019-03-11 07:38:31 -04:00
topjohnwu
a1827fd680 Make sure to read db before 2019-03-11 07:30:37 -04:00
topjohnwu
9ce334feac Update the way to deal with configs 2019-03-11 07:03:36 -04:00
topjohnwu
ed11e0bff6 Fix repackage manager settings migration 2019-03-11 05:43:48 -04:00
topjohnwu
5111086637 Don't care if child threads were unknown 2019-03-10 01:46:32 -05:00
topjohnwu
20f204810e Use RAII to detach PIDs 2019-03-10 01:14:41 -05:00
topjohnwu
4581354e7a Allow zygote to execve
Allow zygote to execute other programs (such as dex2oat).
This fixes the bug that cause ART framework boot images failed to load
and result to extremely serious performance degradation.

Fix #1195
2019-03-09 22:58:05 -05:00
topjohnwu
faf4d76388 Use large vector<bool> instead of set<pid>
vector<bool> uses bitsets, so we actually only use 12k memory to
store all 3 possible PID info tables. PID checkup will be now become
O(1) instead of O(logn).

P.S. The reason why we don't use unordered_map is because including it
will result in significant binary size increase (might be due to the
complex hash table STL implementation? I really don't know).
2019-03-09 22:28:43 -05:00
topjohnwu
a46e255709 Fix strings.xml 2019-03-09 05:47:19 -05:00
Vladimír Kubala
63e2bbb4d1 Slovak translation update 2019-03-09 05:37:50 -05:00
bubuleur
c3dabae237 Update French Language
Small correction line 108 thank you
2019-03-09 05:37:41 -05:00
topjohnwu
f1abcbb7fb Update WorkManager 2019-03-09 05:36:49 -05:00
topjohnwu
70efddb90f Only use SELinux if necessary in init 2019-03-09 05:30:42 -05:00
topjohnwu
f24a5dfd45 More efficient xml parsing 2019-03-09 04:27:04 -05:00
topjohnwu
081074ad9d Better zygote process detection 2019-03-08 23:53:53 -05:00
topjohnwu
ab0cc78d2c Update README.md 2019-03-08 10:23:42 -05:00
topjohnwu
de5c902fdb Remove app-core module
Less confusion
2019-03-08 10:19:22 -05:00
topjohnwu
cf65169c99 Separate stub Magisk Manager to a module 2019-03-08 10:16:02 -05:00
topjohnwu
745865ee53 Add canary channels
Only show if user is already on canary channels
2019-03-08 06:23:13 -05:00
topjohnwu
c134fb1939 Remove unnecessary rules 2019-03-08 04:21:23 -05:00
topjohnwu
0204d05316 Remove Zygote notifier
Temporary trigger process scan on packages.xml updates, will find better methods
2019-03-08 03:35:17 -05:00
topjohnwu
c345633d80 Fix build error
Close #1182
2019-03-08 01:01:42 -05:00
topjohnwu
a57a94040e Update some format magics 2019-03-08 00:47:15 -05:00
topjohnwu
1bde78d121 Rename patch_level -> os_patch_level 2019-03-07 21:59:03 -05:00
topjohnwu
bbd014ad1b More saftey checks and improvements 2019-03-07 21:49:47 -05:00
topjohnwu
1287372f5a Support patching header in magiskboot 2019-03-07 21:32:01 -05:00
topjohnwu
d2cb638fcd Use our own function to parse int 2019-03-07 20:31:35 -05:00
topjohnwu
bbe4b69c8d Fix LZ4FEncoder constructor 2019-03-07 19:58:59 -05:00
topjohnwu
7f08c06943 Remove unnecessary '--' from magiskboot actions 2019-03-07 18:07:23 -05:00
topjohnwu
8f4a6415cd Use ToT r8 for releases 2019-03-07 17:33:06 -05:00
topjohnwu
0442d6d509 Only compress kernel and ramdisk if input not compressed 2019-03-07 07:24:20 -05:00
lindwurm
a3fc6d2a27 l10n: Update Japanese translation
Signed-off-by: lindwurm <lindwurm.q@gmail.com>
2019-03-07 06:10:42 -05:00
linar10
7db05ac927 Update strings.xml 2019-03-07 06:10:29 -05:00
Igor Dyatlov
8bed93b3c5 Updated Russian translation 2019-03-07 06:10:14 -05:00
topjohnwu
915b49014f Build libsqlite.so only with magisk
Fix #1175
2019-03-07 05:21:27 -05:00
topjohnwu
c699f30831 Fix some build issues 2019-03-07 05:05:46 -05:00
topjohnwu
3e73e3a906 Play with Java streams 2019-03-07 03:43:28 -05:00
topjohnwu
32c65d8a88 Upgrade Android Studio 2019-03-07 03:41:24 -05:00
topjohnwu
a49328edd3 Workaround Binder transaction limits 2019-03-07 02:07:34 -05:00
topjohnwu
9a15365a57 Welcome, Java 8/9 APIs
Fix #1162
2019-03-07 00:01:07 -05:00
topjohnwu
82c864d57e Make zygote notifier more reliable 2019-03-06 18:22:04 -05:00
topjohnwu
6226f875ff Make db settings constructor more readable 2019-03-06 08:21:23 -05:00
topjohnwu
370015a853 Modernize database code (again) 2019-03-06 08:16:12 -05:00
topjohnwu
6597b7adc0 Add MicroG DroidGuardHelper as target
MicroG uses a different package to handle DroidGuard service (SafetyNet),
but still uses the same com.google.android.gms.unstable process name.
Thanks to the changes in 4e53ebfe, we can target both official GMS
and MicroG SafetyNet services at the same time.
2019-03-06 05:43:52 -05:00
topjohnwu
4e53ebfe44 Use both package name and process name as key
Different packages could potentially use the same process name,
and they shouldn't conflict with each other.
2019-03-06 05:40:52 -05:00
topjohnwu
04ef1e6405 Make parse prop file a util function 2019-03-05 20:27:09 -05:00
topjohnwu
b278d07b05 Switch to Zygote ptrace-ing
No matter if we use the old, buggy, error prone am_proc_start monitoring,
or the new APK inotify method, both methods rely on MagiskHide 'reacting'
fast enough to hijack the process before any detection has been done.

However, this is not reliable and practical. There are apps that utilize
native libraries to start detects and register SIGCONT signal handlers
to mitigate all existing MagiskHide process monitoring mechanism. So
our only solution is to hijack an app BEFORE it is started.

All Android apps' process is forked from zygote, so it is easily the
target to be monitored. All forks will be notified, and subsequent
thread spawning (Android apps are heaviliy multithreaded) from children
are also closely monitored to find the earliest possible point to
identify what the process will eventually be (before am_proc_bound).

ptrace is extremely complicated and very difficult to get right. The
current code is heaviliy tested on a stock Android 9.0 Pixel system,
so in theory it should work fine on most devices, but more tests and
potentially fixes are expected to follow this commit.
2019-03-05 20:23:27 -05:00
topjohnwu
6c3896079d Add zygote server notifier 2019-03-05 20:23:27 -05:00
topjohnwu
e73fa57d54 Update Android Studio 2019-03-05 07:38:40 -05:00
topjohnwu
eaa9c7e2a0 Android Q init is not always a symlink 2019-03-03 14:56:36 -05:00
topjohnwu
14ae29d907 Support Android Q new init setup 2019-03-03 06:35:25 -05:00
linar10
e8f35b02ca Update strings.xml 2019-03-02 05:49:37 -05:00
topjohnwu
dee3c3e7ba Workaround seccomp on MagiskBoot
Close #1150
2019-03-02 05:46:15 -05:00
topjohnwu
d8cd2031c7 SIGSTOP any possible process ASAP
Shut down any UID matching process and resume if it turns out not to
be our target. Since we will record every single process we have ever
paused, this means that the same process will not be paused erroneously
for another time.

This is an optimization to hijack the app as soon as possible.
2019-03-02 04:24:41 -05:00
topjohnwu
7203e7df5c Create mapping from watch descriptor to UID 2019-03-02 03:44:24 -05:00
topjohnwu
b51feffe80 Limit process name match to cmdline only
We are only interested in Zygote forked processed
2019-03-01 18:13:41 -05:00
topjohnwu
b1afd554fc Application Component Granularity MagiskHide
Before switching to the new MagiskHide implementation (APK inotify),
logcat parsing provides us lots of information to target a process.
We were targeting components so that apps with multi-processes
can still be hidden properly.

After switching to the new implementation, our granularity is limited
to the UID of the process. This is especially dangerous since Android
allow apps signed with the same signature to share UIDs, and many system
apps utilize this for elevated permissions for some services.

This commit introduces process name matching. We could not blanketly
target an UID, so the workaround is to verify its process name before
unmounting.

The tricky thing is that any app developer is allowed to name the
process of its component to whatever they want; there is no 'one
rule to catch them all' to target a specific package. As a result,
Magisk Manager is updated to scan through all components of all apps,
and show different processes of the same app, each as a separate
hide target in the list.

The hide target database also has to be updated accordingly.
Each hide target is now a <package name, process name> pair. The
magiskhide CLI and Magisk Manager is updated to support this new
target format.
2019-03-01 17:08:08 -05:00
topjohnwu
885e3c574b Upgrade dependencies 2019-02-28 23:42:33 -05:00
topjohnwu
05dd5f3396 Only load config prop when needed
Close #922
2019-02-28 23:42:33 -05:00
SakuraSa233
ec3c43faf1 update: Japanese translation 2019-02-28 05:57:53 -05:00
topjohnwu
e72c6685ed Support A only System-as-root Devices
Most Chinese devices (and supposedly Galaxy S10) running Android Pie
is using system-as-root without A/B partition.

https://source.android.com/devices/bootloader/system-as-root#about-system-as-root

According to the docs above, these devices will have a ramdisk block
with size 0 in their boot images. Since magiskinit can run independently
on system-as-root devices, we simply just create an empty ramdisk with
magiskinit added as init.

Huge thanks to @vvb2060 for the heads up and original PR.
Close #980, close #1102
2019-02-28 05:46:36 -05:00
Cristian Silaghi
99d6bd8efc Minor changes for Romanian 2019-02-27 16:44:49 -05:00
linar10
4c8587a9f2 Update strings.xml 2019-02-27 16:44:41 -05:00
John Wu
54a8a05dae Small adjustments in connect.cpp 2019-02-27 16:44:27 -05:00
John Wu
164a99681b Make case Intent.ACTION_REBOOT fall through 2019-02-27 16:44:27 -05:00
vvb2060
0eef4eacd6 Use REBOOT foreground broadcast 2019-02-27 16:44:27 -05:00
topjohnwu
5764f0c839 Compiler flag enhancements
- Enable LTO
- Add -fomit-frame-pointer for even smaller binary size

This commit is inspired by #1075. Close #1075.
2019-02-26 03:42:44 -05:00
topjohnwu
f28e425542 Fix strings resources 2019-02-26 03:13:49 -05:00
Hugwalk
d1a4f046e9 Recreate translations for Chinese (Taiwan)
Fixed wordings to fit Taiwanese accent.
e.g. 日誌 (log) to 記錄檔

Kept proper nouns in English
e.g. Superuser instead of 超級使用者

Removed westernised Chinese as much as possible.
2019-02-26 03:08:29 -05:00
Gozzwip
2ce1dc4afe new translations 2019-02-26 03:07:45 -05:00
linar10
37ac249fd7 Update strings.xml 2019-02-26 03:07:29 -05:00
vvb2060
f152bea8d8 Trim dev name 2019-02-26 03:04:17 -05:00
Oliver Cervera
7b089b888a Update Italian Translation
Minor changes
2019-02-26 02:47:01 -05:00
Cristian Silaghi
68f0e1fe39 Update Romanian translation 2019-02-26 02:46:50 -05:00
topjohnwu
8032bd0bac Introduce /data mirror
Since we switched to imageless Magisk, module files are directly
stored in /data. However, /data is mounted with nosuid, which also
prevents SELinux typetransition to work (auto transition from one
domain to another when executing files with specific context).
This could cause serious issues when we are replacing system critical
components (e.g. app_process for Xposed), because most of them
are daemons that run in special process domains.

This commit introduced /data mirror. Using similar mirroring technique
we used for system and vendor, we mount another mirror that mounts
/data without nosuid flag. All module files are then mounted from this
mirror mountpoint instead of directly from /data.

Close #1080
2019-02-25 06:13:42 -05:00
topjohnwu
0c227f2917 Always clone attribute from existing files to module files
This makes sure no weird permission/SELinux issues shall happen
2019-02-25 05:17:08 -05:00
topjohnwu
c9fa8118d1 Some code adjustments 2019-02-24 23:09:34 -05:00
topjohnwu
63b18246d8 Add compressed ramdisk support 2019-02-24 20:39:01 -05:00
topjohnwu
16ec37a226 Fix compression without outname 2019-02-24 17:45:08 -05:00
topjohnwu
bd4e5bfc1a Some minor optmizations 2019-02-24 17:45:08 -05:00
topjohnwu
621fd0ee29 Fix SEGV_ACCERR on some 64 bit devices 2019-02-24 08:20:05 -05:00
topjohnwu
6ca8db2f0c Welcome to the 64 bit world!
Close #854
2019-02-24 08:13:27 -05:00
topjohnwu
ea129fb206 Allow cpio mv to override existing entries 2019-02-24 05:11:36 -05:00
topjohnwu
3356d7b6ff More friendly to obscure/outdated custom recoveries
Close #1049
2019-02-24 04:45:47 -05:00
topjohnwu
c84023bdc2 Fix crashes when removing verity_key 2019-02-24 04:29:15 -05:00
topjohnwu
86f778c0aa Group unsupported formats into the same code 2019-02-24 02:30:04 -05:00
topjohnwu
defbbdfe21 Update scripts 2019-02-24 02:11:11 -05:00
topjohnwu
0f46493477 Compile magiskboot as static 2019-02-23 17:01:44 -05:00
topjohnwu
340bac7e42 Add decompression command 2019-02-23 16:53:51 -05:00
topjohnwu
1d3ce9fef1 Support loading CPIO from a chunk of bytes 2019-02-23 16:16:35 -05:00
topjohnwu
4a398642b8 Set mode in constructor 2019-02-23 15:22:11 -05:00
topjohnwu
9c89e56c56 Add ramdisk compression option 2019-02-23 15:04:15 -05:00
topjohnwu
267c59b1f1 Add truncate while open 2019-02-23 13:08:54 -05:00
topjohnwu
2ab17204c6 Add stream output for CPIO 2019-02-23 05:06:07 -05:00
topjohnwu
75939047d1 Fix bugs in compression 2019-02-23 04:51:13 -05:00
topjohnwu
2d7f130d2c Introduce Java-like OutputStream 2019-02-23 04:51:13 -05:00
topjohnwu
f7ae72a36c Move CPIO to libutils 2019-02-23 02:42:26 -05:00
topjohnwu
391783e268 Introduce mmap based CPIO class 2019-02-23 02:23:24 -05:00
topjohnwu
6f12c08204 Use ordered map to store CPIO entries 2019-02-22 22:53:20 -05:00
topjohnwu
cb8fe70734 Modernize CPIO code 2019-02-22 02:56:18 -05:00
topjohnwu
69d10b747a Directly use FDT headers for detection 2019-02-21 05:24:05 -05:00
topjohnwu
da3394f34e Move image parsing out of header searching 2019-02-21 05:08:38 -05:00
topjohnwu
b4c2a9f49f More macro magic 2019-02-21 04:14:52 -05:00
topjohnwu
7cee77f57a Some C++ magic to make code cleaner 2019-02-21 02:54:37 -05:00
topjohnwu
f28bd1972f Adjust LZ4F block size 2019-02-21 00:52:47 -05:00
topjohnwu
0f92d1de1b Fix bzip2 decompression 2019-02-20 20:53:54 -05:00
topjohnwu
e59c5c8780 Modernize compress and decompress 2019-02-20 20:49:26 -05:00
kirill9617
86d8026301 Update format.h
GZIP magic is \x1f\x8b\x08 not \x1f\x8b\x08\x00
2019-02-20 03:53:41 -05:00
topjohnwu
d67b827338 Rewrite compression with OOP 2019-02-20 02:10:06 -05:00
topjohnwu
660e0dc09a Fix MagiskHide unmount daemon
Close #1101
2019-02-19 01:50:41 -05:00
John Wu
3ebc886f8a Make sure PPID exists 2019-02-18 03:45:01 -05:00
vvb2060
5b54ef840a Skip same mount namespace 2019-02-18 03:45:01 -05:00
linar10
c08b0d4974 update pl 2019-02-18 03:33:25 -05:00
dark-basic
7d652afd87 Small Changes. Very Small.
I hope it does not have to be adjusted again. Since the text does not appear completely. (Only appears when the rotation of the screen is horizontal)
2019-02-18 03:33:08 -05:00
corsicanu
0f61c627b1 Support deodexed ROM on Pie (Samsung)
- cc @abrahamgcc
2019-02-18 03:32:56 -05:00
lindwurm
7126648404 l10n: ja: Update Japanese translations
Signed-off-by: lindwurm <lindwurm.q@gmail.com>
2019-02-18 03:32:27 -05:00
lindwurm
4a5e2dc9c7 l10n: ja: Fix strings for UI
* strings "インストール", "タップしてSafetyNetチェックを開始" are too long to show in button

Signed-off-by: lindwurm <lindwurm.q@gmail.com>
2019-02-18 03:32:27 -05:00
HemanthJabalpuri
10613686ed Fix bootloop when removing system SuperSU in <5.0 2019-02-18 03:31:16 -05:00
topjohnwu
17ab55115a Add newlines before rc scripts
Based on #1090, thanks to @shakalaca. Close #1090, close #1086
2019-02-18 03:30:30 -05:00
topjohnwu
2708c74ebe Add O_CLOEXEC to opens 2019-02-18 03:25:21 -05:00
topjohnwu
50ff11405f Swap out inotify fd before adding watch targets 2019-02-18 03:18:11 -05:00
topjohnwu
31a27838f5 Fix help message for magisk 2019-02-18 03:09:01 -05:00
topjohnwu
2f1b0fe57f Remove unused scripts 2019-02-18 03:08:40 -05:00
topjohnwu
692f893e1f Monitor /data/system/packages.xml
Reinstalling system apps as data creates tons of issues.
Calling pm path <pkg> is extremely expensive and doesn't work in post-fs-data.
Parse through packages.xml to get APK path and UID at the same time.
As a bonus, we don't need to traverse /data/app for packages anymore.
2019-02-18 03:05:13 -05:00
topjohnwu
14aa6041ec Use a better function to read through files 2019-02-17 22:30:23 -05:00
topjohnwu
fb55fe184c Hide useless error message 2019-02-16 03:41:37 -05:00
topjohnwu
6412bfc7b5 Only care about the first event 2019-02-16 02:49:36 -05:00
topjohnwu
3c56f38229 Change most logs to debug logs 2019-02-16 02:30:48 -05:00
topjohnwu
f4f2274c60 Auto reinstall system apps on hide list
Since we are parsing through /data/app/ to find target APKs for
monitoring, system apps will not be covered in this case.
Automatically reinstall system apps as if they received an update
and refresh the monitor target after it's done.

As a bonus, use RAII idioms for locking pthread_mutex_t.
2019-02-16 02:24:35 -05:00
topjohnwu
19ee189468 Separate scripting code 2019-02-15 20:45:05 -05:00
topjohnwu
a19c7215d2 Better nice name 2019-02-15 04:31:39 -05:00
topjohnwu
8b84039f1f Run service scripts actually in parallel 2019-02-15 01:30:47 -05:00
topjohnwu
9430dbb96c Make sure logcat process does not become a zombie 2019-02-14 17:36:18 -05:00
topjohnwu
4872df6a46 Support old APK paths and don't crash when not match 2019-02-14 16:38:28 -05:00
topjohnwu
014105f0a0 Bring back log dumping 2019-02-14 04:27:30 -05:00
topjohnwu
b106d1c501 Fix stupid mistake 2019-02-14 04:24:30 -05:00
topjohnwu
99db0672b4 Minor MagiskHide adjustments
- Fail fast on unsupported systems
- Show proper fail message on unsupported systems
- inotify_fd shall be swapped out before closing to prevent
  the proc_monitor thread to read from incomplete inotify fd
2019-02-14 04:08:05 -05:00
topjohnwu
d584360de2 More optimized APK traversal 2019-02-14 00:52:59 -05:00
topjohnwu
4eed6794c7 More MagiskHide optimizations
- Use a general procfs traversal function with callbacks
- Much better functions for killing processes
2019-02-13 20:16:26 -05:00
topjohnwu
c66cabd80f Several MagiskHide improvements
- Directly get UID instead of traversing /data/data everytime
- Use /data/user_de/0 instead of /data/data on Android 7.0+
- Update hide_uid set incrementally when adding/initializing targets
- Guard hide_uid set with the same lock as hide_list vector
- Do not add GMS package into database; only add to in-memory list
2019-02-13 06:16:26 -05:00
Park Ju Hyung
24da3485bd Hardcode GMS unstable to MagiskHide
With the new detection method, it is impossible to check for components.

Remove additional checks for components and simply hardcode string to
proc_monitor.cpp and query cmdline to see if it's GMS unstable.

This addresses wasted resources on applying custom namespace
on all GMS processes.

Signed-off-by: Park Ju Hyung <qkrwngud825@gmail.com>
2019-02-12 23:39:57 -05:00
Park Ju Hyung
7384d2d330 Completely rework MagiskHide
Previous MagiskHide detects new app launches via listening through logcat
and filtering launch info messages.

This is extremely inefficient and prone to cause multiple issues both
theoratically and practically.

Rework this by using inotify to detect open() syscalls to target APKs.

This also solves issues related to Zygote-forked caching mechanisms such as
OnePlus OxygenOS' embryo.

Signed-off-by: Park Ju Hyung <qkrwngud825@gmail.com>
2019-02-12 23:39:57 -05:00
topjohnwu
e5940168fe Fix string resources 2019-02-12 17:03:20 -05:00
Igor Sorocean
6855baf0f8 Update romanian translation 2019-02-12 17:01:11 -05:00
Fatih Fırıncı
dfd16e8fef Update strings.xml 2019-02-12 17:01:01 -05:00
Remita Amine
98a36819bc Limit Boot Image selection dialog to File Managers 2019-02-12 17:00:48 -05:00
marciozomb13
de8bc9ca9d Update strings.xml
PT-rBR update
2019-02-12 17:00:32 -05:00
topjohnwu
c137f2de4f Remove SDK 16 support completely
Android 4.1 init miss several significant features Magisk reply on,
so the final decision is to forget about it in the future.

Pull minSdkVersion of Magisk Manager back to 17 and remove some
unnecessary adjustments done for SDK 16
2019-02-12 16:58:05 -05:00
topjohnwu
0f55fcafe8 Migrate EXT4 images instead of removing them 2019-02-12 16:13:31 -05:00
topjohnwu
ed027ec3ee Refactor build flags 2019-02-12 05:17:02 -05:00
topjohnwu
b3fd79cbb9 Add more cmdline options and specify as internal API 2019-02-12 04:05:51 -05:00
topjohnwu
ed4df87b57 Remove imgtool 2019-02-12 02:44:46 -05:00
topjohnwu
1321f097b8 Remove usage of magisk.img
Mounting ext4 images causes tons of issues, such as unmountable with broken F2FS drivers.
Resizing is also very complicated and does not work properly on all devices.
Each step in either measuring free space, resizing, and shrinking the image is a
point of failure, and either step's failure could cause the module system completely broken.

The new method is to directly store modules into /data/adb/modules, and for module installation
on boot /data/adb/modules_update. Several compatibility layers has been done: the new path is
bind mounted to the old path (/sbin/.magisk/img), and the helper functions in util_functions.sh
will now transparently make existing modules install to the new location without any changes.

MagiskHide is also updated to unmount module files stored in this new location.
2019-02-12 02:14:57 -05:00
Aidan Holland
cfa28f0c4a Empty Exceptions 2019-02-11 17:14:29 -05:00
topjohnwu
ab47b717b1 Reorganize scripts 2019-02-11 17:14:07 -05:00
Aidan Holland
65ebb0d2f8 Misc Formatting
* PEP8 and linting
* empty exceptions
2019-02-11 03:18:15 -05:00
Rom
49640ce03a Update French translation 2019-02-11 03:06:44 -05:00
vvb2060
e05cdc83f3 fix extract_bb 2019-02-11 02:35:04 -05:00
topjohnwu
992a9ea2f9 Fix EMUI 9 detection 2019-02-11 02:26:15 -05:00
topjohnwu
228351fc13 Prevent bootloop on non system-as-root devices
Close #1058
2019-02-10 13:51:41 -05:00
topjohnwu
8a5b6f2b86 Block all signals in daemon 2019-02-10 04:18:50 -05:00
topjohnwu
71ecbb3af3 Clean/refactor includes 2019-02-10 03:57:51 -05:00
topjohnwu
5746614ccf Keep track of timestamps and skip old logs 2019-02-10 03:16:52 -05:00
topjohnwu
3a422c3f15 Remove magisklogd, use threads and BlockingQueue 2019-02-10 01:05:19 -05:00
topjohnwu
b3242322fd Harden socket verification
- Do not allow connections to magiskd from binaries other than the one started the server
- Do not allow connections to magisklogd without root access
2019-02-09 15:02:46 -05:00
Licaon_Kter
9826640ae6 f-strings need Python 3.6
...this is a blocker for F-Droid since Debian Strech has only Python 3.5.x
2019-02-09 05:35:05 -05:00
topjohnwu
1f5267204b Better cmdline parsing 2019-02-09 05:23:56 -05:00
topjohnwu
ed25e1bbd6 Directly inject services into init.rc 2019-02-09 02:48:05 -05:00
topjohnwu
c8491d008f Move sbin overlay creation to magiskinit 2019-02-09 01:51:46 -05:00
Mevlüt TOPÇU
08e3405394 Update strings.xml 2019-02-07 00:45:51 -05:00
dark-basic
4ebfa07186 Some adjustments - Update Strings
I changed some words for their synonyms. In order to verify how it behaves on screens less than 5 inches.
(Some changes were made, since several devices I have, some words do not appear yet having space)
2019-02-07 00:45:43 -05:00
Erfan Abdi
6698c189fc Support non-ext4 filesystem for vendor and system
Signed-off-by: Erfan Abdi <erfangplus@gmail.com>
2019-02-07 00:45:30 -05:00
topjohnwu
f0639390aa Update dependencies 2019-02-07 00:37:40 -05:00
topjohnwu
bbdfed2d5a Fix strings 2019-02-05 00:52:52 -05:00
Madis
7f4daa2c50 Estonian update 2019-02-05 00:50:53 -05:00
Gozzwip
baf9b67b35 Creating Azerbaijani file 2019-02-05 00:50:40 -05:00
Mevlüt TOPÇU
caf73b0b36 Update Turksih language
Merge please

Thank you
2019-02-05 00:50:28 -05:00
Furkan
acf87c2794 fix one word 2019-02-05 00:50:17 -05:00
topjohnwu
7f5f6b54fb Ask for fingerprint before deleting policy
Close #1038
2019-02-04 23:08:06 -05:00
topjohnwu
a08eb8a446 Hide install button by default
Close #1037
2019-02-04 22:56:45 -05:00
443 changed files with 16515 additions and 13367 deletions

1
.gitattributes vendored
View File

@@ -16,3 +16,4 @@ chromeos/** binary
*.exe binary
*.apk binary
*.png binary
*.jpg binary

1
.gitignore vendored
View File

@@ -15,4 +15,3 @@ native/out
/.idea
/build
/captures
.externalNativeBuild

View File

@@ -1,41 +1,75 @@
# Magisk
[Downloads](https://github.com/topjohnwu/Magisk/releases) | [Documentation](https://topjohnwu.github.io/Magisk/) | [XDA Thread](https://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445)
[Downloads](https://github.com/topjohnwu/Magisk/releases) \| [Documentation](https://topjohnwu.github.io/Magisk/) \| [XDA Thread](https://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445)
## Introduction
Magisk is a suite of open source tools for customizing Android, supporting devices higher than Android 4.2 (API 17). It covers the fundamental parts for Android customization: root, boot scripts, SELinux patches, AVB2.0 / dm-verity / forceencrypt removals etc.
Furthermore, Magisk provides a **Systemless Interface** to alter the system (or vendor) arbitrarily while the actual partitions stay completely intact. With its systemless nature along with several other hacks, Magisk can hide modifications from nearly any system integrity verifications used in banking apps, corporation monitoring apps, game cheat detections, and most importantly [Google's SafetyNet API](https://developer.android.com/training/safetynet/index.html).
## Bug Reports
**Make sure to install the latest [Canary Build](https://forum.xda-developers.com/apps/magisk/dev-magisk-canary-channel-bleeding-edge-t3839337) before reporting any bugs!** **DO NOT** report bugs that is already fixed upstream. Follow the instructions in the [Canary Channel XDA Thread](https://forum.xda-developers.com/apps/magisk/dev-magisk-canary-channel-bleeding-edge-t3839337), and report a bug either by opening an issue on GitHub or directly in the thread.
## Building Environment Requirements
1. Python 3: run `build.py` script
2. Java Development Kit (JDK) 8: Compile Magisk Manager and sign zips
3. Latest Android SDK: set `ANDROID_HOME` environment variable to the path to Android SDK
4. Android NDK: Install NDK along with SDK (`$ANDROID_HOME/ndk-bundle`), or optionally specify a custom path `ANDROID_NDK_HOME`
5. (Windows Only) Python package Colorama: Install with `pip install colorama`, used for ANSI color codes
- Python 3: run `build.py` script
- Java Development Kit (JDK) 8: Compile Magisk Manager and sign zips
- Latest Android SDK: set `ANDROID_HOME` environment variable to the path to Android SDK
- Android NDK: Install NDK along with SDK (`$ANDROID_HOME/ndk-bundle`), or optionally specify a custom path `ANDROID_NDK_HOME`
- (Windows Only) Python package Colorama: Install with `pip install colorama`, used for ANSI color codes
## Building Notes and Instructions
1. Clone sources with submodules: `git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git`
2. Building is supported on macOS, Linux, and Windows. Official releases are built and tested with [FrankeNDK](https://github.com/topjohnwu/FrankeNDK); point `ANDROID_NDK_HOME` to FrankeNDK if you want to use it for compiling.
3. Set configurations in `config.prop`. A sample file `config.prop.sample` is provided as an example.
4. Run `build.py` with argument `-h` to see the built-in help message. The `-h` option also works for each supported actions, e.g. `./build.py binary -h`
5. By default, `build.py` build binaries and Magisk Manager in debug mode. If you want to build Magisk Manager in release mode (via the `-r, --release` flag), you need a Java Keystore file `release-key.jks` (only `JKS` format is supported) to sign APKs and zips. For more information, check out [Google's Official Documentation](https://developer.android.com/studio/publish/app-signing.html#signing-manually).
- Clone sources with submodules: `git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git`
- Building is supported on macOS, Linux, and Windows. Official releases are built and tested with [FrankeNDK](https://github.com/topjohnwu/FrankeNDK); point `ANDROID_NDK_HOME` to FrankeNDK if you want to use it for compiling.
- Set configurations in `config.prop`. A sample file `config.prop.sample` is provided as an example.
- Run `build.py` with argument `-h` to see the built-in help message. The `-h` option also works for each supported actions, e.g. `./build.py binary -h`
- By default, `build.py` build binaries and Magisk Manager in debug mode. If you want to build Magisk Manager in release mode (via the `-r, --release` flag), you need a Java Keystore file `release-key.jks` (only `JKS` format is supported) to sign APKs and zips. For more information, check out [Google's Official Documentation](https://developer.android.com/studio/publish/app-signing.html#signing-manually).
## Translations
Default string resources for Magisk Manager are scattered throughout
- `app/src/main/res/values/strings.xml`
- `stub/src/main/res/values/strings.xml`
- `shared/src/main/res/values/strings.xml`
Translate each and place them in the respective locations (`<module>/src/main/res/values-<lang>/strings.xml`).
## Signature Verification
Official release zips and APKs are signed with my personal private key. You can verify the key certificate to make sure the binaries you downloaded are not manipulated in anyway.
``` bash
# Use the keytool command from JDK to print certificates
keytool -printcert -jarfile <APK or Magisk zip>
# The output should contain the following signature
Owner: CN=John Wu, L=Taipei, C=TW
Issuer: CN=John Wu, L=Taipei, C=TW
Serial number: 50514879
Valid from: Sun Aug 14 13:23:44 EDT 2016 until: Tue Jul 21 13:23:44 EDT 2116
Certificate fingerprints:
MD5: CE:DA:68:C1:E1:74:71:0A:EF:58:89:7D:AE:6E:AB:4F
SHA1: DC:0F:2B:61:CB:D7:E9:D3:DB:BE:06:0B:2B:87:0D:46:BB:06:02:11
SHA256: B4:CB:83:B4:DA:D9:9F:99:7D:BE:87:2F:01:3A:A1:6C:14:EE:C4:1D:16:70:21:F3:71:F7:E1:33:0F:27:3E:E6
Signature algorithm name: SHA256withRSA
Version: 3
```
## 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.
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.
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/>.
```
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

2
app-core/.gitignore vendored
View File

@@ -1,2 +0,0 @@
/build
src/main/res/raw/util_functions.sh

View File

@@ -1,21 +0,0 @@
apply plugin: 'com.android.library'
android {
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api project(':net')
api project(':signing')
api 'org.kamranzafar:jtar:2.3'
def libsuVersion = '2.3.0'
api "com.github.topjohnwu.libsu:core:${libsuVersion}"
api "com.github.topjohnwu.libsu:io:${libsuVersion}"
}

View File

@@ -1,4 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.topjohnwu.magisk.core" >
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
</manifest>

View File

@@ -1,61 +0,0 @@
package com.topjohnwu.magisk;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Build;
import android.preference.PreferenceManager;
import com.topjohnwu.magisk.core.BuildConfig;
import com.topjohnwu.magisk.database.MagiskDB;
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.utils.LocaleManager;
import com.topjohnwu.magisk.utils.RootUtils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import java.util.concurrent.ThreadPoolExecutor;
public class App extends Application {
public static App self;
public static ThreadPoolExecutor THREAD_POOL;
// Global resources
public SharedPreferences prefs;
public MagiskDB mDB;
public RepoDatabaseHelper repoDB;
static {
Shell.Config.setFlags(Shell.FLAG_MOUNT_MASTER | Shell.FLAG_USE_MAGISK_BUSYBOX);
Shell.Config.verboseLogging(BuildConfig.DEBUG);
Shell.Config.addInitializers(RootUtils.class);
Shell.Config.setTimeout(2);
THREAD_POOL = (ThreadPoolExecutor) AsyncTask.THREAD_POOL_EXECUTOR;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
self = this;
Context de = this;
if (Build.VERSION.SDK_INT >= 24) {
de = createDeviceProtectedStorageContext();
de.moveSharedPreferencesFrom(this, PreferenceManager.getDefaultSharedPreferencesName(base));
}
prefs = PreferenceManager.getDefaultSharedPreferences(de);
mDB = new MagiskDB(this);
Networking.init(this);
LocaleManager.setLocale(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleManager.setLocale(this);
}
}

View File

@@ -1,64 +0,0 @@
package com.topjohnwu.magisk.container;
import org.kamranzafar.jtar.TarHeader;
import java.io.File;
import java.util.Arrays;
public class TarEntry extends org.kamranzafar.jtar.TarEntry {
public TarEntry(File file, String entryName) {
super(file, entryName);
}
/*
* Workaround missing java.nio.file.attribute.PosixFilePermission
* Simply just assign a default permission to the file
* */
@Override
public void extractTarHeader(String entryName) {
int permissions = file.isDirectory() ? 000755 : 000644;
header = TarHeader.createHeader(entryName, file.length(), file.lastModified() / 1000, file.isDirectory(), permissions);
header.userName = new StringBuffer("");
header.groupName = header.userName;
}
/*
* Rewrite the header to GNU format
* */
@Override
public void writeEntryHeader(byte[] outbuf) {
super.writeEntryHeader(outbuf);
System.arraycopy("ustar \0".getBytes(), 0, outbuf, 257, TarHeader.USTAR_MAGICLEN);
getOctalBytes(header.mode, outbuf, 100, TarHeader.MODELEN);
getOctalBytes(header.userId, outbuf, 108, TarHeader.UIDLEN);
getOctalBytes(header.groupId, outbuf, 116, TarHeader.GIDLEN);
getOctalBytes(header.size, outbuf, 124, TarHeader.SIZELEN);
getOctalBytes(header.modTime, outbuf, 136, TarHeader.MODTIMELEN);
Arrays.fill(outbuf, 148, 148 + TarHeader.CHKSUMLEN, (byte) ' ');
Arrays.fill(outbuf, 329, 329 + TarHeader.USTAR_DEVLEN, (byte) '\0');
Arrays.fill(outbuf, 337, 337 + TarHeader.USTAR_DEVLEN, (byte) '\0');
// Recalculate checksum
getOctalBytes(computeCheckSum(outbuf), outbuf, 148, TarHeader.CHKSUMLEN);
}
/*
* Proper octal to ASCII conversion
* */
private void getOctalBytes(long value, byte[] buf, int offset, int length) {
int idx = length - 1;
buf[offset + idx] = 0;
--idx;
for (long val = value; idx >= 0; --idx) {
buf[offset + idx] = (byte) ((byte) '0' + (byte) (val & 7));
val = val >> 3;
}
}
}

View File

@@ -1,42 +0,0 @@
package com.topjohnwu.magisk.utils;
import android.content.Context;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.core.R;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
import com.topjohnwu.superuser.io.SuFile;
import java.io.InputStream;
import androidx.annotation.NonNull;
public class RootUtils extends Shell.Initializer {
public static void rmAndLaunch(String rm, String launch) {
Shell.su(Utils.fmt("(rm_launch %d %s %s)&", Const.USER_ID, rm, launch)).exec();
}
@Override
public boolean onInit(Context context, @NonNull Shell shell) {
Shell.Job job = shell.newJob();
if (shell.isRoot()) {
job.add(context.getResources().openRawResource(R.raw.util_functions))
.add(context.getResources().openRawResource(R.raw.utils));
Const.MAGISK_DISABLE_FILE = new SuFile("/cache/.disable_magisk");
Config.loadMagiskInfo();
} else {
InputStream nonroot = context.getResources().openRawResource(R.raw.nonroot_utils);
job.add(nonroot);
}
job.add("mount_partitions", "get_flags", "run_migrations", "export BOOTMODE=true").exec();
Config.keepVerity = Boolean.parseBoolean(ShellUtils.fastCmd("echo $KEEPVERITY"));
Config.keepEnc = Boolean.parseBoolean(ShellUtils.fastCmd("echo $KEEPFORCEENCRYPT"));
Config.recovery = Boolean.parseBoolean(ShellUtils.fastCmd("echo $RECOVERYMODE"));
return true;
}
}

View File

@@ -1,108 +0,0 @@
package com.topjohnwu.magisk.utils;
import com.topjohnwu.superuser.internal.UiThreadHandler;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.HashSet;
import java.util.Set;
import androidx.annotation.IntDef;
public class Topic {
public static final int MAGISK_HIDE_DONE = 0;
public static final int MODULE_LOAD_DONE = 1;
public static final int REPO_LOAD_DONE = 2;
public static final int UPDATE_CHECK_DONE = 3;
public static final int LOCALE_FETCH_DONE = 4;
@IntDef({MAGISK_HIDE_DONE, MODULE_LOAD_DONE, REPO_LOAD_DONE,
UPDATE_CHECK_DONE, LOCALE_FETCH_DONE})
@Retention(RetentionPolicy.SOURCE)
public @interface TopicID {}
// We will not dynamically add topics, so use arrays instead of hash tables
private static Store[] topicList = new Store[5];
public static void subscribe(Subscriber sub, @TopicID int... topics) {
for (int topic : topics) {
if (topicList[topic] == null)
topicList[topic] = new Store();
topicList[topic].subscribers.add(sub);
if (topicList[topic].published) {
sub.onPublish(topic, topicList[topic].results);
}
}
}
public static void subscribe(AutoSubscriber sub) {
subscribe(sub, sub.getSubscribedTopics());
}
public static void unsubscribe(Subscriber sub, @TopicID int... topics) {
for (int topic : topics) {
if (topicList[topic] == null)
continue;
topicList[topic].subscribers.remove(sub);
}
}
public static void unsubscribe(AutoSubscriber sub) {
unsubscribe(sub, sub.getSubscribedTopics());
}
public static void publish(@TopicID int topic, Object... results) {
publish(true, topic, results);
}
public static void publish(boolean persist, @TopicID int topic, Object... results) {
if (topicList[topic] == null)
topicList[topic] = new Store();
if (persist) {
topicList[topic].results = results;
topicList[topic].published = true;
}
for (Subscriber sub : topicList[topic].subscribers) {
UiThreadHandler.run(() -> sub.onPublish(topic, results));
}
}
public static void reset(@TopicID int... topics) {
for (int topic : topics) {
if (topicList[topic] == null)
continue;
topicList[topic].published = false;
topicList[topic].results = null;
}
}
public static boolean isPublished(@TopicID int... topics) {
for (int topic : topics) {
if (topicList[topic] == null)
return false;
if (!topicList[topic].published)
return false;
}
return true;
}
public static boolean isPublished(AutoSubscriber sub) {
return isPublished(sub.getSubscribedTopics());
}
private static class Store {
boolean published = false;
Set<Subscriber> subscribers = new HashSet<>();
Object[] results;
}
public interface Subscriber {
void onPublish(int topic, Object[] result);
}
public interface AutoSubscriber extends Subscriber {
@TopicID
int[] getSubscribedTopics();
}
}

View File

@@ -1,7 +0,0 @@
# Magisk Manager
This repo is no longer an independent component. It is merged into the [Magisk Project](https://github.com/topjohnwu/Magisk).
# Translations
The default (English) strings are mainly in `src/full/res/values/strings.xml`; some are scattered in `src/main/res/values/strings.xml` and `src/stub/res/values/strings.xml`.
Translations are highly appreciated via pull requests here on Github.
Place translated XMLs in the corresponding locale folder.

View File

@@ -1,81 +1,66 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
def configProps = new Properties()
def configPath = project.hasProperty('configPath') ? project.configPath : rootProject.file('config.prop')
configProps.load(new FileInputStream(configPath))
kapt {
correctErrorTypes = true
useBuildCache = true
mapDiagnosticLocations = true
javacOptions {
option("-Xmaxerrs", 1000)
}
}
android {
defaultConfig {
applicationId 'com.topjohnwu.magisk'
vectorDrawables.useSupportLibrary = true
}
signingConfigs {
config {
storeFile rootProject.file('release-key.jks')
storePassword configProps['keyStorePass']
keyAlias configProps['keyAlias']
keyPassword configProps['keyPass']
versionName configProps['appVersion']
versionCode configProps['appVersionCode'] as Integer
javaCompileOptions {
annotationProcessorOptions {
argument('butterknife.debuggable', 'false')
}
}
}
buildTypes {
debug {
// If keystore exists, sign the APK with custom signature
if (signingConfigs.config.storeFile.exists())
signingConfig signingConfigs.config
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
flavorDimensions 'mode'
productFlavors {
full {
versionName configProps['appVersion']
versionCode configProps['appVersionCode'] as Integer
javaCompileOptions {
annotationProcessorOptions {
argument('butterknife.debuggable', 'false')
}
}
}
stub {
versionCode 1
versionName 'stub'
}
}
lintOptions {
disable 'MissingTranslation'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(':net')
fullImplementation project(':app-core')
fullImplementation 'ru.noties:markwon:2.0.1'
fullImplementation 'com.caverock:androidsvg-aar:1.3'
implementation project(':shared')
implementation project(':signing')
implementation 'com.github.topjohnwu:jtar:1.0.0'
implementation 'net.sourceforge.streamsupport:android-retrostreams:1.7.0'
implementation 'com.github.sevar83:indeterminate-checkbox:1.0.5'
def markwonVersion = '3.0.0'
implementation "ru.noties.markwon:core:${markwonVersion}"
implementation "ru.noties.markwon:html:${markwonVersion}"
implementation "ru.noties.markwon:image-svg:${markwonVersion}"
def androidXVersion = "1.0.0"
implementation 'androidx.core:core:1.0.1'
fullImplementation 'androidx.constraintlayout:constraintlayout:1.1.3'
fullImplementation 'androidx.appcompat:appcompat:1.0.2'
fullImplementation "androidx.preference:preference:${androidXVersion}"
fullImplementation "androidx.recyclerview:recyclerview:${androidXVersion}"
fullImplementation "androidx.cardview:cardview:${androidXVersion}"
fullImplementation "com.google.android.material:material:${androidXVersion}"
fullImplementation 'android.arch.work:work-runtime:1.0.0-beta03'
fullImplementation 'androidx.room:room-runtime:2.0.0'
fullImplementation 'androidx.transition:transition:1.0.1'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation "androidx.preference:preference:${androidXVersion}"
implementation "androidx.recyclerview:recyclerview:${androidXVersion}"
implementation "androidx.cardview:cardview:${androidXVersion}"
implementation "com.google.android.material:material:${androidXVersion}"
implementation 'androidx.work:work-runtime:2.0.1'
implementation 'androidx.transition:transition:1.1.0-beta01'
def butterKnifeVersion = '10.0.0'
fullImplementation "com.jakewharton:butterknife-runtime:${butterKnifeVersion}"
fullAnnotationProcessor "com.jakewharton:butterknife-compiler:${butterKnifeVersion}"
def libsuVersion = '2.5.0'
implementation "com.github.topjohnwu.libsu:core:${libsuVersion}"
implementation "com.github.topjohnwu.libsu:io:${libsuVersion}"
def butterKnifeVersion = '10.1.0'
implementation "com.jakewharton:butterknife-runtime:${butterKnifeVersion}"
kapt "com.jakewharton:butterknife-compiler:${butterKnifeVersion}"
}

View File

@@ -29,12 +29,18 @@
void onResponse(int);
}
# DelegateWorker
-keep,allowobfuscation class * extends com.topjohnwu.magisk.model.worker.DelegateWorker
# BootSigner
-keepclassmembers class com.topjohnwu.signer.BootSigner { *; }
-keepclassmembers class com.topjohnwu.signing.BootSigner { *; }
# SVG
-dontwarn com.caverock.androidsvg.SVGAndroidRenderer
# RetroStreams
-dontwarn java9.**
# Strip logging
-assumenosideeffects class com.topjohnwu.magisk.utils.Logger {
public *** debug(...);
@@ -43,4 +49,8 @@
# Excessive obfuscation
-repackageclasses 'a'
-allowaccessmodification
-optimizationpasses 6
# QOL
-dontnote **
-dontwarn com.caverock.androidsvg.**
-dontwarn ru.noties.markwon.**

View File

@@ -1,75 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.topjohnwu.magisk">
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name="a.e"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning">
<!-- Activities -->
<activity
android:name="a.b"
android:configChanges="orientation|screenSize"
android:exported="true" />
<activity
android:name="a.c"
android:configChanges="orientation|screenSize"
android:exported="true"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="a.f"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="nosensor"
android:theme="@style/AppTheme.NoDrawer" />
<!-- Superuser -->
<activity
android:name="a.m"
android:directBootAware="true"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:taskAffinity="a.m"
android:theme="@style/SuRequest" />
<!-- Receiver -->
<receiver
android:name="a.h"
android:directBootAware="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.LOCALE_CHANGED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Service -->
<service android:name="a.j" />
<!-- Hardcode GMS version -->
<meta-data
android:name="com.google.android.gms.version"
android:value="12451000" />
</application>
</manifest>

View File

@@ -1,235 +0,0 @@
package com.topjohnwu.magisk;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import com.topjohnwu.magisk.components.BaseActivity;
import com.topjohnwu.magisk.container.Policy;
import com.topjohnwu.magisk.utils.FingerprintHelper;
import com.topjohnwu.magisk.utils.SuConnector;
import com.topjohnwu.magisk.utils.Utils;
import java.io.IOException;
import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources;
import butterknife.BindView;
public class SuRequestActivity extends BaseActivity {
@BindView(R.id.su_popup) LinearLayout suPopup;
@BindView(R.id.timeout) Spinner timeout;
@BindView(R.id.app_icon) ImageView appIcon;
@BindView(R.id.app_name) TextView appNameView;
@BindView(R.id.package_name) TextView packageNameView;
@BindView(R.id.grant_btn) Button grant_btn;
@BindView(R.id.deny_btn) Button deny_btn;
@BindView(R.id.fingerprint) ImageView fingerprintImg;
@BindView(R.id.warning) TextView warning;
private SuConnector connector;
private Policy policy;
private CountDownTimer timer;
private FingerprintHelper fingerprintHelper;
private SharedPreferences timeoutPrefs;
@Override
public int getDarkTheme() {
return R.style.SuRequest_Dark;
}
@Override
public void finish() {
if (timer != null)
timer.cancel();
if (fingerprintHelper != null)
fingerprintHelper.cancel();
super.finish();
}
@Override
public void onBackPressed() {
if (policy != null) {
handleAction(Policy.DENY);
} else {
finish();
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
PackageManager pm = getPackageManager();
app.mDB.clearOutdated();
timeoutPrefs = Utils.getDEContext().getSharedPreferences("su_timeout", 0);
// Get policy
Intent intent = getIntent();
try {
String socketName = intent.getStringExtra("socket");
connector = new SuConnector(socketName) {
@Override
protected void onResponse() throws IOException {
out.writeInt(policy.policy);
}
};
Bundle bundle = connector.readSocketInput();
int uid = Integer.parseInt(bundle.getString("uid"));
policy = app.mDB.getPolicy(uid);
if (policy == null) {
policy = new Policy(uid, pm);
}
} catch (IOException | PackageManager.NameNotFoundException e) {
e.printStackTrace();
finish();
return;
}
// Never allow com.topjohnwu.magisk (could be malware)
if (TextUtils.equals(policy.packageName, BuildConfig.APPLICATION_ID)) {
finish();
return;
}
switch ((int) Config.get(Config.Key.SU_AUTO_RESPONSE)) {
case Config.Value.SU_AUTO_DENY:
handleAction(Policy.DENY, 0);
return;
case Config.Value.SU_AUTO_ALLOW:
handleAction(Policy.ALLOW, 0);
return;
case Config.Value.SU_PROMPT:
default:
}
// If not interactive, response directly
if (policy.policy != Policy.INTERACTIVE) {
handleAction();
return;
}
setContentView(R.layout.activity_request);
new SuRequestActivity_ViewBinding(this);
appIcon.setImageDrawable(policy.info.loadIcon(pm));
appNameView.setText(policy.appName);
packageNameView.setText(policy.packageName);
if (Build.VERSION.SDK_INT >= 17) {
warning.setCompoundDrawablesRelativeWithIntrinsicBounds(
AppCompatResources.getDrawable(this, R.drawable.ic_warning), null, null, null);
} else {
warning.setCompoundDrawablesWithIntrinsicBounds(
AppCompatResources.getDrawable(this, R.drawable.ic_warning), null, null, null);
}
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.allow_timeout, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
timeout.setAdapter(adapter);
timeout.setSelection(timeoutPrefs.getInt(policy.packageName, 0));
timer = new CountDownTimer((int) Config.get(Config.Key.SU_REQUEST_TIMEOUT) * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
deny_btn.setText(getString(R.string.deny_with_str, "(" + millisUntilFinished / 1000 + ")"));
}
@Override
public void onFinish() {
deny_btn.setText(getString(R.string.deny_with_str, "(0)"));
handleAction(Policy.DENY);
}
};
boolean useFP = FingerprintHelper.useFingerprint();
if (useFP) {
try {
fingerprintHelper = new FingerprintHelper() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
warning.setText(errString);
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
warning.setText(helpString);
}
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
handleAction(Policy.ALLOW);
}
@Override
public void onAuthenticationFailed() {
warning.setText(R.string.auth_fail);
}
};
fingerprintHelper.authenticate();
} catch (Exception e) {
e.printStackTrace();
useFP = false;
}
}
if (!useFP) {
grant_btn.setOnClickListener(v -> {
handleAction(Policy.ALLOW);
timer.cancel();
});
grant_btn.requestFocus();
}
grant_btn.setVisibility(useFP ? View.GONE : View.VISIBLE);
fingerprintImg.setVisibility(useFP ? View.VISIBLE : View.GONE);
deny_btn.setOnClickListener(v -> {
handleAction(Policy.DENY);
timer.cancel();
});
suPopup.setOnClickListener(v -> cancelTimeout());
timeout.setOnTouchListener((v, event) -> cancelTimeout());
timer.start();
}
private boolean cancelTimeout() {
timer.cancel();
deny_btn.setText(getString(R.string.deny));
return false;
}
private void handleAction() {
connector.response();
finish();
}
private void handleAction(int action) {
int pos = timeout.getSelectedItemPosition();
timeoutPrefs.edit().putInt(policy.packageName, pos).apply();
handleAction(action, Config.Value.TIMEOUT_LIST[pos]);
}
private void handleAction(int action, int time) {
policy.policy = action;
if (time >= 0) {
policy.until = (time == 0) ? 0 : (System.currentTimeMillis() / 1000 + time * 60);
app.mDB.updatePolicy(policy);
}
handleAction();
}
}

View File

@@ -1,169 +0,0 @@
package com.topjohnwu.magisk.adapters;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Topic;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.internal.UiThreadHandler;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.ViewHolder> {
private static PackageInfo PLATFORM;
private List<PackageInfo> fullList, showList;
private List<String> hideList;
private PackageManager pm;
private boolean showSystem;
public ApplicationAdapter(Context context) {
fullList = showList = Collections.emptyList();
hideList = Collections.emptyList();
pm = context.getPackageManager();
showSystem = false;
if (PLATFORM == null) {
try {
PLATFORM = pm.getPackageInfo("android", PackageManager.GET_SIGNATURES);
} catch (PackageManager.NameNotFoundException ignored) {}
}
AsyncTask.SERIAL_EXECUTOR.execute(this::loadApps);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_app, parent, false);
return new ViewHolder(v);
}
@WorkerThread
private void loadApps() {
fullList = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);
hideList = Shell.su("magiskhide --ls").exec().getOut();
for (Iterator<PackageInfo> i = fullList.iterator(); i.hasNext(); ) {
PackageInfo info = i.next();
if (Const.HIDE_BLACKLIST.contains(info.packageName) ||
/* Do not show disabled apps */
!info.applicationInfo.enabled ||
/* Never show platform apps */
PLATFORM.signatures[0].equals(info.signatures[0])) {
i.remove();
}
}
Collections.sort(fullList, (a, b) -> {
boolean ah = hideList.contains(a.packageName);
boolean bh = hideList.contains(b.packageName);
if (ah == bh) {
return Utils.getAppLabel(a.applicationInfo, pm)
.compareToIgnoreCase(Utils.getAppLabel(b.applicationInfo, pm));
} else if (ah) {
return -1;
} else {
return 1;
}
});
Topic.publish(false, Topic.MAGISK_HIDE_DONE);
}
public void setShowSystem(boolean b) {
showSystem = b;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ApplicationInfo info = showList.get(position).applicationInfo;
holder.appIcon.setImageDrawable(info.loadIcon(pm));
holder.appName.setText(Utils.getAppLabel(info, pm));
holder.appPackage.setText(info.packageName);
holder.checkBox.setOnCheckedChangeListener(null);
holder.checkBox.setChecked(hideList.contains(info.packageName));
holder.checkBox.setOnCheckedChangeListener((v, isChecked) -> {
if (isChecked) {
Shell.su("magiskhide --add " + info.packageName).submit();
hideList.add(info.packageName);
} else {
Shell.su("magiskhide --rm " + info.packageName).submit();
hideList.remove(info.packageName);
}
});
}
@Override
public int getItemCount() {
return showList.size();
}
private boolean contains(String s, String filter) {
return s.toLowerCase().contains(filter);
}
// Show if have launch intent or not system app
private boolean systemFilter(PackageInfo info) {
if (showSystem)
return true;
return (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ||
pm.getLaunchIntentForPackage(info.packageName) != null;
}
public void filter(String constraint) {
AsyncTask.SERIAL_EXECUTOR.execute(() -> {
showList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
for (PackageInfo info : fullList) {
if (systemFilter(info))
showList.add(info);
}
} else {
String filter = constraint.toLowerCase();
for (PackageInfo info : fullList) {
if ((contains(Utils.getAppLabel(info.applicationInfo, pm), filter) ||
contains(info.packageName, filter)) && systemFilter(info)) {
showList.add(info);
}
}
}
UiThreadHandler.run(this::notifyDataSetChanged);
});
}
public void refresh() {
AsyncTask.SERIAL_EXECUTOR.execute(this::loadApps);
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.app_icon) ImageView appIcon;
@BindView(R.id.app_name) TextView appName;
@BindView(R.id.package_name) TextView appPackage;
@BindView(R.id.checkbox) CheckBox checkBox;
ViewHolder(View itemView) {
super(itemView);
new ApplicationAdapter$ViewHolder_ViewBinding(this, itemView);
}
}
}

View File

@@ -1,100 +0,0 @@
package com.topjohnwu.magisk.components;
import android.app.Service;
import android.content.Intent;
import android.net.Uri;
import android.os.IBinder;
import android.widget.Toast;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.FlashActivity;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.container.Repo;
import com.topjohnwu.magisk.uicomponents.ProgressNotification;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import androidx.annotation.Nullable;
public class DownloadModuleService extends Service {
private boolean running = false;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (flags == 0 && running) {
Utils.toast(R.string.dl_one_module, Toast.LENGTH_LONG);
} else {
running = true;
Shell.EXECUTOR.execute(() -> {
Repo repo = intent.getParcelableExtra("repo");
boolean install = intent.getBooleanExtra("install", false);
dlProcessInstall(repo, install);
stopSelf();
});
}
return START_REDELIVER_INTENT;
}
private void dlProcessInstall(Repo repo, boolean install) {
File output = new File(Const.EXTERNAL_PATH, repo.getDownloadFilename());
ProgressNotification progress = new ProgressNotification(output.getName());
startForeground(progress.hashCode(), progress.getNotification());
try {
InputStream in = Networking.get(repo.getZipUrl())
.setDownloadProgressListener(progress)
.execForInputStream().getResult();
removeTopFolder(in, new BufferedOutputStream(new FileOutputStream(output)));
if (install) {
progress.dismiss();
Intent intent = new Intent(this, ClassMap.get(FlashActivity.class));
intent.setData(Uri.fromFile(output))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(Const.Key.FLASH_ACTION, Const.Value.FLASH_ZIP);
startActivity(intent);
} else {
progress.dlDone();
}
} catch (Exception e) {
e.printStackTrace();
progress.dlFail();
}
}
private void removeTopFolder(InputStream in, OutputStream out) throws IOException {
try (ZipInputStream zin = new ZipInputStream(in);
ZipOutputStream zout = new ZipOutputStream(out)) {
ZipEntry entry;
int off = -1;
while ((entry = zin.getNextEntry()) != null) {
if (off < 0)
off = entry.getName().indexOf('/') + 1;
String path = entry.getName().substring(off);
if (path.isEmpty())
continue;
zout.putNextEntry(new ZipEntry(path));
if (!entry.isDirectory())
ShellUtils.pump(zin, zout);
}
}
}
}

View File

@@ -1,103 +0,0 @@
package com.topjohnwu.magisk.uicomponents;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import com.caverock.androidsvg.SVG;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.net.ResponseListener;
import com.topjohnwu.signing.ByteArrayStream;
import com.topjohnwu.superuser.ShellUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.Callable;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import ru.noties.markwon.Markwon;
import ru.noties.markwon.SpannableConfiguration;
import ru.noties.markwon.spans.AsyncDrawable;
public class MarkDownWindow {
private static final SpannableConfiguration config = SpannableConfiguration.builder(App.self)
.asyncDrawableLoader(new Loader()).build();
public static void show(Activity activity, String title, String url) {
Networking.get(url).getAsString(new Listener(activity, title));
}
public static void show (Activity activity, String title, InputStream is) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ShellUtils.pump(is, baos);
new Listener(activity, title).onResponse(baos.toString());
} catch (IOException ignored) {}
}
static class Listener implements ResponseListener<String> {
Activity activity;
String title;
Listener(Activity a, String t) {
activity = a;
title = t;
}
@Override
public void onResponse(String md) {
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
alert.setTitle(title);
View mv = LayoutInflater.from(activity).inflate(R.layout.markdown_window, null);
Markwon.setMarkdown(mv.findViewById(R.id.md_txt), config, md);
alert.setView(mv);
alert.setNegativeButton(R.string.close, (dialog, id) -> dialog.dismiss());
alert.show();
}
}
static class Loader implements AsyncDrawable.Loader {
@Override
public void load(@NonNull String url, @NonNull AsyncDrawable asyncDrawable) {
App.THREAD_POOL.submit((Callable<?>) () -> {
InputStream is = Networking.get(url).execForInputStream().getResult();
if (is == null)
return null;
ByteArrayStream buf = new ByteArrayStream();
buf.readFrom(is);
// First try default drawables
Drawable drawable = Drawable.createFromStream(buf.getInputStream(), "");
if (drawable == null) {
// SVG
SVG svg = SVG.getFromInputStream(buf.getInputStream());
int width = Utils.dpInPx((int) svg.getDocumentWidth());
int height = Utils.dpInPx((int) svg.getDocumentHeight());
final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
final Canvas canvas = new Canvas(bitmap);
float density = App.self.getResources().getDisplayMetrics().density;
canvas.scale(density, density);
svg.renderToCanvas(canvas);
drawable = new BitmapDrawable(App.self.getResources(), bitmap);
}
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
asyncDrawable.setResult(drawable);
return null;
});
}
@Override
public void cancel(@NonNull String url) {}
}
}

View File

@@ -1,53 +0,0 @@
package com.topjohnwu.magisk.utils;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.components.UpdateCheckService;
import com.topjohnwu.magisk.tasks.CheckUpdates;
import java.util.concurrent.TimeUnit;
import androidx.work.Constraints;
import androidx.work.ExistingPeriodicWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
public class AppUtils {
public static void scheduleUpdateCheck() {
if (Config.get(Config.Key.CHECK_UPDATES)) {
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest request = new PeriodicWorkRequest
.Builder(ClassMap.get(UpdateCheckService.class), 12, TimeUnit.HOURS)
.setConstraints(constraints)
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork(
Const.ID.CHECK_MAGISK_UPDATE_WORKER_ID,
ExistingPeriodicWorkPolicy.REPLACE, request);
} else {
WorkManager.getInstance().cancelUniqueWork(Const.ID.CHECK_MAGISK_UPDATE_WORKER_ID);
CheckUpdates.check();
}
}
public static void openLink(Context context, Uri link) {
Intent intent = new Intent(Intent.ACTION_VIEW, link);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (intent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(intent);
} else {
Utils.toast(R.string.open_link_failed_toast, Toast.LENGTH_SHORT);
}
}
}

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#757575"
android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M13,7h-2v2h2L13,7zM13,11h-2v6h2v-6zM17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#757575"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#757575"
android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#757575"
android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/>
</vector>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0" >
<path
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2c-1.1,0 -2,0.9 -2,2S10.9,8 12,8zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,10 12,10zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2c1.1,0 2,-0.9 2,-2S13.1,16 12,16z"
android:fillColor="#757575"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#757575"
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>

View File

@@ -1,8 +0,0 @@
# v7.0.0
- Major UI redesign!
- Render Markdown natively (no more buggy WebView!)
- Support down to Android 4.1 (native Magisk only support Android 4.2 though)
- Significantly improve Magisk log disply performance
- Fix post OTA scripts for A/B devices
- Reduce memory usages when verifying and signing boot image
- Drop support for Magisk lower than v18.0

View File

@@ -1,189 +0,0 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<resources>
<string name="advanced_settings_title">إعدادات متقدمة</string>
<string name="app_changelog">تغييرات التطبيق</string>
<string name="app_translators">مترجم التطبيق</string>
<string name="author">انشئ بواسطة %1$s</string>
<string name="auto_response">استجابة تلقائية</string>
<string name="checking_for_updates">البحث عن تحديثات…</string>
<string name="checking_safetyNet_status">التحقق من حالة SafetyNet…</string>
<string name="close">إغلاق</string>
<string name="command">الأمر: %1$s</string>
<string name="deny">رفض</string>
<string name="deny_with_str">رفض%1$s</string>
<string name="disable_file_created">سيتم تعطيل الإضافة في إعادة التشغيل التالي</string>
<string name="disable_file_removed">سيتم تمكين الإضافة في إعادة التشغيل التالي</string>
<string name="download">التنزيل</string>
<string name="downloads">التنزيلات</string>
<string name="forever">للابد</string>
<string name="grant">سماح</string>
<string name="install">التثبيت</string>
<string name="installed">مثبت</string>
<string name="internal_storage">"يتم تخزين الملف المضغوط في:
[التخزين الداخلي]%1$s"</string>
<string name="keep_dm_verity">إبقاء AVB 2.0/dm-verity</string>
<string name="keep_force_encryption">الحفاظ علي قوه التشفير</string>
<string name="log">السجل</string>
<string name="log_is_empty">السجل فارغ</string>
<string name="logs_cleared">تم حذف السجل بنجاح</string>
<string name="magisk_update_title">تحديث Magisk جديد متوفر!</string>
<string name="magisk_version_error">Magisk غير مثبت</string>
<string name="menuClearLog">حذف السجل الآن</string>
<string name="menuReload">إعادة تحميل</string>
<string name="modules">الإضافات</string>
<string name="multiuser_mode">وضع تعدد المستخدمين</string>
<string name="no_apps_found">لا توجد تطبيقات</string>
<string name="no_info_provided">(لم يتم توفير أي معلومات)</string>
<string name="no_modules_found">لم يعثر على الإضافات</string>
<string name="none">بدون</string>
<string name="not_installed">غير مثبت</string>
<string name="once">مرة</string>
<string name="owner_manage_summary">يمكن للمالك فقط إدارة صلاحيات الروت وتلقي مطالبات الطلب</string>
<string name="owner_only_summary">المالك فقط لديه صلاحيات الروت</string>
<string name="prompt">طلب</string>
<string name="reboot">إعادة التشغيل</string>
<string name="release_notes">ملاحظات الإصدار</string>
<string name="remove_file_created">سيتم حذف الإضافة في إعادة التشغيل التالي</string>
<string name="remove_file_deleted">لن يتم حذف الإضافة في إعادة التشغيل التالي</string>
<string name="repo_cache_cleared">تم مسح الذاكرة المؤقته للمستودع</string>
<string name="repo_install_msg">هل تريد تثبيت %1$s ?</string>
<string name="repo_install_title">تثبيت %1$s</string>
<string name="request_timeout">مهلة الطلب</string>
<string name="request_timeout_summary">%1$d ثانية</string>
<string name="safetyNet_check_success">نجح فحص SafetyNet</string>
<string name="safetyNet_check_text">انقر لبدء فحص SafetyNet</string>
<string name="safetyNet_res_invalid">الاستجابة غير صالحه</string>
<string name="settings">الإعدادات</string>
<string name="settings_clear_cache_summary">حذف المعلومات المخزنة مؤقتا للمستودع على الانترنت، يجبر التطبيق لتحديث عبر الانترنت</string>
<string name="settings_clear_cache_title">حذف الذاكرة المؤقتة للمستودع</string>
<string name="settings_core_only_summary">تمكين الميزات الأساسية فقط، لن يتم تحميل جميع الإضافات. MagiskSU، MagiskHide، systemless hosts، و لا يزال ممكنا</string>
<string name="settings_core_only_title">Magisk الوضع الأساسي فقط</string>
<string name="settings_dark_theme_summary">تفعيل السمة الغامقة</string>
<string name="settings_dark_theme_title">السمة الغامقة</string>
<string name="settings_general_category">عام</string>
<string name="settings_hosts_summary">Systemless يدعم تطبيقات حجب الإعلانات</string>
<string name="settings_hosts_title">تمكين المضيفين(الهوست) لـ systemless</string>
<string name="settings_magiskhide_summary">إخفاء Magisk من مختلف الاكتشافات</string>
<string name="settings_owner_manage">إدارة مالك الجهاز</string>
<string name="settings_owner_only">مالك الجهاز فقط</string>
<string name="settings_reboot_toast">إعادة التشغيل لتطبيق الإعدادات</string>
<string name="settings_su_adb">ADB فقط</string>
<string name="settings_su_app">التطبيقات فقط</string>
<string name="settings_su_app_adb">التطبيقات و ADB</string>
<string name="settings_su_disable">معطل</string>
<string name="settings_su_request_10">10 ثواني</string>
<string name="settings_su_request_20">20 ثانية</string>
<string name="settings_su_request_30">30 ثانية</string>
<string name="settings_su_request_60">60 ثانية</string>
<string name="settings_user_independent">مستخدم مستقل</string>
<string name="sixtymin">60 دقائق</string>
<string name="su_allow_toast">%1$s يتم منح صلاحيات Superuser</string>
<string name="su_deny_toast">%1$s يتم رفض صلاحيات Superuser</string>
<string name="su_request_title">Superuser طلبات</string>
<string name="su_revoke_msg">تأكيد لسحب صلاحيات %1$s ?</string>
<string name="su_revoke_title">سحب؟</string>
<string name="su_snack_deny">Superuser الصلاحيات لـ %1$s تم رفضها</string>
<string name="su_snack_grant">Superuser الصلاحيات لـ %1$s تم منحها</string>
<string name="su_snack_log_off">السجلات لـ %1$s تم تعطيلها</string>
<string name="su_snack_log_on">السجلات لـ %1$s تم تفعيلها</string>
<string name="su_snack_notif_off">الإشعارات لـ %1$s تم تعطيلها</string>
<string name="su_snack_notif_on">الإشعارات لـ %1$s تم تفعيلها</string>
<string name="su_snack_revoke">%1$s الصلاحيات سحبت</string>
<string name="su_warning">"منح حق الوصول الكامل إلى جهازك.
رفض إذا كنت غير متأكد!"</string>
<string name="superuser">Superuser</string>
<string name="superuser_access">Superuser صلاحيات</string>
<string name="superuser_notification">Superuser إشعارات</string>
<string name="target_uid">الهدف UID: %1$d</string>
<string name="tenmin">10 دقائق</string>
<string name="thirtymin">30 دقائق</string>
<string name="toast">ملاحظة منبثقة</string>
<string name="translators">xx6600xx ,silent_6600</string>
<string name="twentymin">20 دقائق</string>
<string name="uninstall">إلغاء التثبيت</string>
<string name="uninstall_magisk_title">إلغاء تثبيت Magisk</string>
<string name="update_available">يتوفر تحديث</string>
<string name="update_file_created">سيتم تحديث الإضافة في إعادة التشغيل التالي</string>
<string name="user_indepenent_summary">كل مستخدم لديه قواعد روت منفصلة خاصة به</string>
<string name="android_o_not_support">لا يدعم إصدار الأندرويد +8.0</string>
<string name="auth_fail">فشل المصادقة</string>
<string name="auth_fingerprint">مصادقة البصمة</string>
<string name="boot_file_patch_msg">حدد الذاكرة المؤقتة لنسخة boot الأصلية بتنسيق img. أو .img.tar</string>
<string name="complete_uninstall">إلغاء التثبيت بالكامل</string>
<string name="direct_install">تثبيت مباشر (موصى به)</string>
<string name="disable_fingerprint">لم يتم تعيين بصمات الأصابع أو لا يوجد جهاز مدعوم</string>
<string name="download_zip_only">تحميل ملف zip فقط</string>
<string name="dtbo_patched_reboot">قام مدير Magisk بتصحيح dtbo.img ، يرجى إعادة التشغيل</string>
<string name="dtbo_patched_title">تم تصحيح DTBO!</string>
<string name="env_fix_msg">يحتاج جهازك إلى إعداد إضافي لـ Magisk للعمل بشكل صحيح. سيتم تنزيل ملف zip لتثبيت Magisk ، هل تريد المتابعة الآن؟</string>
<string name="env_fix_title">يتطلب إعداد إضافي</string>
<string name="flashing">التثبيت</string>
<string name="global_summary">تستخدم كافة جلسات الجذر مساحة الأسم ذات التركيب العالمي</string>
<string name="hide_manager_fail_toast">فشل إخفاء مدير Magisk …</string>
<string name="hide_manager_title">إخفاء مدير Magisk…</string>
<string name="install_inactive_slot">التثبيت على فتحة غير نشطة (بعد OTA)</string>
<string name="install_inactive_slot_msg">"سيتم إجبار جهازك للتمهيد على الفتحة غير النشطة الحالية بعد إعادة التشغيل!
فقط استخدام هذا الخيار بعد الانتهاء من OTA.
استمرار؟"</string>
<string name="invalid_update_channel">قناة تحديث غير صالحة</string>
<string name="isolate_summary">سيكون لكل جلسة جذر مساحة الاسم الخاصة بها معزولة</string>
<string name="language">اللغة</string>
<string name="update_channel">تحديثات Magisk</string>
<string name="manager_download_install">اضغط للتنزيل والتثبيت</string>
<string name="manager_update_title">تحديث مدير Magisk الجديد متوفر!</string>
<string name="menuSaveLog">حفظ السجل</string>
<string name="mount_namespace_mode">وضع تركيب مساحة الأسم</string>
<string name="open_link_failed_toast">لم يتم العثور على تطبيق لفتح الرابط …</string>
<string name="patch_boot_file">تصحيح ملف صورة boot</string>
<string name="proprietary_notice">مدير Magisk هو FOSS ، والذي لا يحتوي على شفرة API الخاصة بشركة SafetyNet الخاصة بشركة Google.
هل تسمح لـ Magisk Manager بتنزيل ملحق (يحتوي على GoogleApiClient) لعمليات التحقق من SafetyNet؟ "</string>
<string name="proprietary_title">تحميل رمز الملكية</string>
<string name="reboot_bootloader">إعادة تمهيد إلى وضع Bootloader</string>
<string name="reboot_download">إعادة تمهيد إلى وضع التحميل</string>
<string name="reboot_recovery">إعادة تمهيد إلى وضع الإسترداد</string>
<string name="requester_summary">"سترث جلسات الجذر مساحة الأسماء المطلوبة الخاصة بها"</string>
<string name="restore_done">تمت الأستعادة!</string>
<string name="restore_fail">النسخ الاحتياطي الأصلي غير موجود!</string>
<string name="restore_img">استعادة الصور</string>
<string name="restore_img_msg">الأستعادة …</string>
<string name="safetyNet_api_error">خطأ SafetyNet API</string>
<string name="select_method">حدد الطريقة</string>
<string name="settings_boot_format_summary">"حدد تنسيق ملف boot المصحح للإخراج.
اختر img. للتثبيت من خلال وضع fastboot/ التحميل ؛ اختر img.tar. للتثبيت مع ODIN. "</string>
<string name="settings_boot_format_title">تنسيق إخراج ملف Boot المصحح</string>
<string name="settings_check_update_summary">التحقق من التحديثات في الخلفية بشكل دوري</string>
<string name="settings_check_update_title">تفقد التحديث</string>
<string name="settings_hide_manager_summary">أعد حزم مدير Magisk مع اسم حزمة عشوائية</string>
<string name="settings_hide_manager_title">إخفاء مدير Magisk</string>
<string name="settings_ns_global">مساحة الاسم العالمية</string>
<string name="settings_ns_isolate">مساحة الاسم المعزولة</string>
<string name="settings_ns_requester">وراثة مساحة الاسم</string>
<string name="settings_restore_manager_summary">استعادة مدير Magisk مع الحزمة الأصلية</string>
<string name="settings_restore_manager_title">استعادة مدير Magisk</string>
<string name="settings_su_fingerprint_summary">أستخدام ماسح بصمات الأصابع للسماح بطلبات المستخدم المتميز</string>
<string name="settings_su_fingerprint_title">تمكين مصادقة البصمة</string>
<string name="settings_su_reauth_summary">أعد المصادقة على صلاحيات المستخدم المتميز بعد إجراء ترقيات للتطبيق</string>
<string name="settings_su_reauth_title">إعادة المصادقة بعد الترقية</string>
<string name="settings_update">تحديث الاعدادات</string>
<string name="settings_update_beta">بيتا</string>
<string name="settings_update_channel_title">قناة التحديث</string>
<string name="settings_update_custom">مخصص</string>
<string name="settings_update_custom_msg">أدخل عنوان URL مخصص</string>
<string name="settings_update_stable">مستقر</string>
<string name="setup_done">تم الإعداد</string>
<string name="setup_fail">فشل الإعداد</string>
<string name="setup_msg">تشغيل إعداد البيئة…</string>
<string name="setup_title">إعداد إضافي</string>
<string name="sort_by_name">الترتيب حسب الاسم</string>
<string name="sort_by_update">فرز حسب آخر تحديث</string>
<string name="sorting_order">ترتيب الفرز</string>
<string name="system_default">(أفتراضي النظام)</string>
<string name="uninstall_magisk_msg">سيتم تعطيل/إزالة جميع الوحدات. ستتم إزالة الجذر ، وربما تشفير بياناتك إذا كانت بياناتك غير مشفرة حالياً</string>
<string name="update">تحديث</string>
<string name="updated_on">تم التحديث في: %1$s</string>
<string name="warning">تحذير</string>
<string name="downloading_toast">جاري التنزيل %1$s</string>
<string name="download_file_error">خطأ تنزيل الملف</string>
<string name="no_rw_storage">أن هذه الميزة لا تعمل دون الحصول على إذن الكتابة على التخزين الخارجي.</string>
</resources>

View File

@@ -1,212 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Модули</string>
<string name="downloads">Изтегляния</string>
<string name="superuser">Superuser</string>
<string name="log">Дневник</string>
<string name="settings">Настройки</string>
<string name="install">Инсталиране</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk не е инсталиран.</string>
<string name="checking_for_updates">Проверяваме за актуализации…</string>
<string name="invalid_update_channel">Невалиден канал за актуализации</string>
<string name="safetyNet_check_text">Докоснете за стартиране на SafetyNet проверката.</string>
<string name="checking_safetyNet_status">Проверка статуса на SafetyNet…</string>
<string name="safetyNet_check_success">SafetyNet проверката е успешна.</string>
<string name="safetyNet_api_error">Грешка в SafetyNet ППИ</string>
<string name="safetyNet_res_invalid">Невалиден отговор</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Допълнителни настройки</string>
<string name="keep_force_encryption">Запазване на наложеното криптиране</string>
<string name="keep_dm_verity">Запазване на AVB 2.0/dm-verity</string>
<string name="current_installed">Инсталирана: %1$s</string>
<string name="latest_version">Най-нова: %1$s</string>
<string name="uninstall">Деинсталиране</string>
<string name="uninstall_magisk_title">Деинсталиране на Magisk</string>
<string name="uninstall_magisk_msg">Всички модули ще бъдат изключени/премахнати. Руут достъпът ще бъде премахнат и е възможно криптиране на данните Ви.</string>
<string name="update">Актуализация</string>
<!--Module Fragment-->
<string name="no_info_provided">(Не е представена информация)</string>
<string name="no_modules_found">Няма намерени модули.</string>
<string name="update_file_created">Модулът ще бъде обновен при следващото рестартиране.</string>
<string name="remove_file_created">Модулът ще бъде премахнат при следващото рестартиране.</string>
<string name="remove_file_deleted">Модулът няма да бъде премахнат при следващото рестартиране.</string>
<string name="disable_file_created">Модулът ще бъде изключен при следващото рестартиране.</string>
<string name="disable_file_removed">Модулът ще бъде активиран при следващото рестартиране.</string>
<string name="author">Създаден от %1$s</string>
<string name="reboot_recovery">Рестартиране в режима за възстановяване</string>
<string name="reboot_bootloader">Рестартиране в буутлоудъра</string>
<string name="reboot_download">Рестартиране в даунлоуд режима</string>
<!--Repo Fragment-->
<string name="update_available">Налице е актуализация.</string>
<string name="installed">Инсталирани</string>
<string name="not_installed">Не са инсталирани</string>
<string name="updated_on">Актуализиран на: %1$s</string>
<string name="sorting_order">Сортиране</string>
<string name="sort_by_name">Сортиране по наименование</string>
<string name="sort_by_update">Сортиране по последно обновяване</string>
<!--Log Fragment-->
<string name="menuSaveLog">Запазване на доклад</string>
<string name="menuReload">Презареждане</string>
<string name="menuClearLog">Изчистване на дневника</string>
<string name="logs_cleared">Успешно изчистване на дневника.</string>
<string name="log_is_empty">Дневникът е празен.</string>
<!--About Activity-->
<string name="app_changelog">Списък с промени</string>
<string name="translators" />
<string name="app_translators">Преводачи</string>
<!--Toasts, Dialogs-->
<string name="close">Затваряне</string>
<string name="repo_install_title">Инсталиране на %1$s</string>
<string name="repo_install_msg">Желаете ли да инсталирате %1$s сега?</string>
<string name="download">Изтегляне</string>
<string name="reboot">Рестартиране</string>
<string name="magisk_update_title">Налице е нова версия на Magisk.</string>
<string name="settings_reboot_toast">Трябва да рестартирате устройството, за да бъдат приложени настройките.</string>
<string name="release_notes">Бележки</string>
<string name="repo_cache_cleared">Кешът на хранилището е изчистен.</string>
<string name="internal_storage">Архивът е записан във:\n[Вътрешната памет]%1$s.</string>
<string name="manager_update_title">Налице е нова версия на Magisk Manager.</string>
<string name="manager_download_install">Докоснете за изтегляне и инсталиране.</string>
<string name="dtbo_patched_title">DTBO беше модифициран!</string>
<string name="dtbo_patched_reboot">Magisk Manager модифицира dtbo.img, моля да рестартирате устройството.</string>
<string name="update_channel">Актуализации на Magisk</string>
<string name="flashing">Инсталиране</string>
<string name="hide_manager_title">Скриване на Magisk Manager…</string>
<string name="hide_manager_fail_toast">Скриването на Magisk Manager бе неуспешно.</string>
<string name="open_link_failed_toast">Не бе намерено приложение за отваряне на линка.</string>
<string name="download_zip_only">Изтегляне само на архив</string>
<string name="patch_boot_file">Модифициране на Boot образа</string>
<string name="direct_install">Директно инсталиране (Препоръчва се.)</string>
<string name="install_inactive_slot">Инсталиране на неактивен слот (След OTA)</string>
<string name="warning">Внимание</string>
<string name="install_inactive_slot_msg">Вашето устройство НАЛОЖИТЕЛНО ще стартира текущия неактивен слот при следващото рестартиране.\nИзползвайте тази опция само след като приключи инсталирането на OTA.\nПродължаване?</string>
. <string name="select_method">Избор на метод</string>
<string name="boot_file_patch_msg">Изберете стоков boot образ с формат .img или .img.tar.</string>
<string name="complete_uninstall">Пълно деинсталиране</string>
<string name="restore_img">Възстановяване на образи</string>
<string name="restore_img_msg">Възстановяване…</string>
<string name="restore_done">Възстановяването е успешно!</string>
<string name="restore_fail">Не е налице архив на стоковия образ!</string>
<string name="proprietary_title">Изтегляне на патентования код</string>
<string name="proprietary_notice">Magisk Manager е FOSS и затова не включва патентования код за SafetyNet ППИ на Google.\n\nПозволявате ли на Magisk Manager да изтегли добавката (включва GoogleApiClient) за SafetyNet проверки?</string>
<string name="setup_done">Първоначалната настройка е готова.</string>
<string name="setup_fail">Първоначалната настройка е неуспешна.</string>
<string name="env_fix_title">Изисква допълнително настройване</string>
<string name="env_fix_msg">Вашето устройство се нуждае от допълнително надстройване на Magisk, за да работи нормално. Ще бъде изтеглен архивът за надстройка на Magisk. Желаете ли да продължите?</string>
<string name="setup_title">Допълнително надстройване</string>
<string name="setup_msg">Надстройването на средата е в ход…</string>
<string name="download_file_error">Грешка при изтеглянето на файла.</string>
<string name="downloading_toast">Изтегляне на %1$s</string>
<string name="no_rw_storage">Тази функция няма да работи без разрешение за запис във външната памет.</string>
<!--Settings Activity -->
<string name="settings_general_category">Общи</string>
<string name="settings_dark_theme_title">Тъмна тема</string>
<string name="settings_dark_theme_summary">Включване на тъмната тема</string>
<string name="settings_clear_cache_title">Изчистване кеша на хранилището</string>
<string name="settings_clear_cache_summary">Изчистване на кешираната информация на онлайн хранилището за принудителното му обновяване.</string>
<string name="settings_hide_manager_title">Скриване на Magisk Manager</string>
<string name="settings_hide_manager_summary">Смяна пакетното наименование на Magisk Manager със случайно наименование.</string>
<string name="settings_restore_manager_title">Възстановяване на Magisk Manager</string>
<string name="settings_restore_manager_summary">Възстановяване на оригиналното пакетно наименование на Magisk Manager.</string>
<string name="language">Език</string>
<string name="system_default">(Системен)</string>
<string name="settings_update">Настройки за актуализиране</string>
<string name="settings_check_update_title">Проверка за актуализации</string>
<string name="settings_check_update_summary">Периодично проверяване за актуализации във фонов режим.</string>
<string name="settings_update_channel_title">Канал за актуализации</string>
<string name="settings_update_stable">Стабилен</string>
<string name="settings_update_beta">Бета</string>
<string name="settings_update_custom">Потребителски</string>
<string name="settings_update_custom_msg">Въведете потребителски URL</string>
<string name="settings_boot_format_title">Изходен формат за модифициран boot образ</string>
<string name="settings_boot_format_summary">Избор на изходен формат за модифициран boot образ.\nИзберете .img за инсталиране чрез fastboot/даунлоуд режима; изберете .img.tar за инсталиране чрез ODIN.</string>
<string name="settings_core_only_title">Режим Magisk Core Only</string>
<string name="settings_core_only_summary">Работят само основни функции, като MagiskSU и MagiskHide, без всякакви модули.</string>
<string name="settings_magiskhide_summary">Скриване на Magisk от различни детектори.</string>
<string name="settings_hosts_title">Несистемни хостове</string>
<string name="settings_hosts_summary">Поддръжка на несистемни хостове за използване на приложения, блокиращи реклами.</string>
<string name="settings_hosts_toast">Бе добавен модул с несистемни хостове.</string>
<string name="settings_su_app_adb">Приложения и ADB</string>
<string name="settings_su_app">Само приложения</string>
<string name="settings_su_adb">Само ADB</string>
<string name="settings_su_disable">Изключен</string>
<string name="settings_su_request_10">10 секунди</string>
<string name="settings_su_request_15">15 секунди</string>
<string name="settings_su_request_20">20 секунди</string>
<string name="settings_su_request_30">30 секунди</string>
<string name="settings_su_request_45">45 секунди</string>
<string name="settings_su_request_60">60 секунди</string>
<string name="superuser_access">Superuser достъп</string>
<string name="auto_response">Автоматичен отговор</string>
<string name="request_timeout">Време за запитване</string>
<string name="superuser_notification">Superuser известие</string>
<string name="request_timeout_summary">%1$d секунди</string>
<string name="settings_su_reauth_title">Повторно запитване след актуализация</string>
<string name="settings_su_reauth_summary">Повторно запитване за Superuser достъп след актуализация на приложенията.</string>
<string name="settings_su_fingerprint_title">Superuser права само с пръстов отпечатък</string>
<string name="settings_su_fingerprint_summary">Използване на сензора за пръстови отпечатъци за разрешаване на Superuser достъп.</string>
<string name="auth_fingerprint">Удостоверете с пръстов отпечатък.</string>
<string name="multiuser_mode">Потребителски достъп</string>
<string name="settings_owner_only">Само собственик</string>
<string name="settings_owner_manage">Управление от страна на собственика</string>
<string name="settings_user_independent">Независими потребители</string>
<string name="owner_only_summary">Само собственикът има руут достъп.</string>
<string name="owner_manage_summary">Само собственикът може да управлява руут достъпа и да получава запитвания за достъп.</string>
<string name="user_indepenent_summary">Всеки потребител има собствени правила за руут достъп.</string>
<string name="mount_namespace_mode">Монтиране по именни пространства</string>
<string name="settings_ns_global">Глобално</string>
<string name="settings_ns_requester">Наследено</string>
<string name="settings_ns_isolate">Изолирано</string>
<string name="global_summary">Всички сесии с руут достъп използват глобалното именно пространство.</string>
<string name="requester_summary">Всички сесии с руут достъп наследяват именното пространство на запитващото приложение.</string>
<string name="isolate_summary">Всички сесии с руут достъп имат собствени именни пространства.</string>
<string name="android_o_not_support">Не поддържа Android 8.0+.</string>
<string name="disable_fingerprint">Не са добавени пръстови отпечатъци или устройството не поддържа тази функция.</string>
<!--Superuser-->
<string name="su_request_title">Запитване за Superuser достъп</string>
<string name="deny_with_str">Отказ%1$s</string>
<string name="deny">Отказ</string>
<string name="prompt">Запитване</string>
<string name="grant">Разрешаване</string>
<string name="su_warning">Дава пълен достъп до устройството Ви.\Откажете, ако не сте сигурен/на.</string>
<string name="forever">Завинаги</string>
<string name="once">Веднъж</string>
<string name="tenmin">10 мин</string>
<string name="twentymin">20 мин</string>
<string name="thirtymin">30 мин</string>
<string name="sixtymin">60 мин</string>
<string name="su_allow_toast">На %1$s бе разрешен Superuser достъп.</string>
<string name="su_deny_toast">На %1$s бе отказан Superuser достъп.</string>
<string name="no_apps_found">Няма намерени приложения.</string>
<string name="su_snack_grant">На %1$s е предоставен Superuser достъп.</string>
<string name="su_snack_deny">На %1$s е отказан Superuser достъп.</string>
<string name="su_snack_notif_on">Известията за %1$s са включени.</string>
<string name="su_snack_notif_off">Известията за %1$s са изключени.</string>
<string name="su_snack_log_on">Записването в дневника за %1$s е включено.</string>
<string name="su_snack_log_off">Записването в дневника за %1$s е изключено.</string>
<string name="su_snack_revoke">Настройките за достъп на %1$s са анулирани.</string>
<string name="su_revoke_title">Анулиране?</string>
<string name="su_revoke_msg">Потвърждавате ли анулирането на настройките за достъп на %1$s?</string>
<string name="toast">Toast</string>
<string name="none">Без</string>
<string name="auth_fail">Неуспешна заверка.</string>
<!--Superuser logs-->
<string name="target_uid">Целеви UID: %1$d</string>
<string name="command">Команда: %1$s</string>
</resources>

View File

@@ -1,224 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Mòduls</string>
<string name="downloads">Baixada</string>
<string name="superuser">Superusuari</string>
<string name="log">Registre</string>
<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_message">Aquesta versió de Magisk Manager no suporta una versió inferior a la 18.0.\n\nPots actualitzar Magisk manualment o pots instalar una versió anterior de la app.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk no està instal·lat</string>
<string name="checking_for_updates">Cercant actualitzacions</string>
<string name="invalid_update_channel">Canal d\'actualització invàlid</string>
<string name="safetyNet_check_text">Comprova l\'estat de SafetyNet</string>
<string name="checking_safetyNet_status">Comprovant l\'estat de SafetyNet…</string>
<string name="safetyNet_check_success">La comprovació ha sigut exitosa</string>
<string name="safetyNet_api_error">Error en la API de SafetyNet</string>
<string name="safetyNet_res_invalid">La resposta és invàlida</string>
<string name="magisk_up_to_date">Magisk està actualitzat</string>
<string name="manager_up_to_date">Magisk Manager està actualitzat</string>
<string name="advanced_settings_title">Configuració avançada</string>
<string name="keep_force_encryption">Mantenir el xifrat forçat</string>
<string name="keep_dm_verity">Mantenir AVB 2.0/dm-verity</string>
<string name="current_installed">Instal·lada: %1$s</string>
<string name="latest_version">Última: %1$s</string>
<string name="uninstall">Desinstal·lar</string>
<string name="uninstall_magisk_title">Desinstal·lar Magisk</string>
<string name="uninstall_magisk_msg">Tots els mòduls seran desactivats / eliminats. L\'accés Arrel s\'eliminarà i, possiblement, xifrarà totes les dades si no estan ja xifrades.</string>
<string name="update">Actualització</string>
<string name="core_only_enabled">(Mode únicament nucli activat)</string>
<!--Module Fragment-->
<string name="no_info_provided">(No hi ha informació)</string>
<string name="no_modules_found">No s\han trobat mòduls</string>
<string name="update_file_created">El mòdul s\actualitzarà en el següent reinici</string>
<string name="remove_file_created">El mòdul s\eliminarà en el següent reinici</string>
<string name="remove_file_deleted"> El mòdul no s\eliminarà en el següent reinici </string>
<string name="disable_file_created"> El mòdul es desactivarà en el següent reinici </string>
<string name="disable_file_removed"> El mòdul s\activarà en el següent reinici </string>
<string name="author">Creat per %1$s</string>
<string name="reboot_recovery">Reiniciar en Mode Recuperació</string>
<string name="reboot_bootloader">Reiniciar en Mode Bootloader</string>
<string name="reboot_download">Reiniciar en Mode Download</string>
<!--Repo Fragment-->
<string name="update_available">Actualització Disponible</string>
<string name="installed">Instal·lat</string>
<string name="not_installed">No Instal·lat</string>
<string name="updated_on">Actualitzat el: %1$s</string>
<string name="sorting_order">Ordre de Classificació</string>
<string name="sort_by_name">Ordenar per nom</string>
<string name="sort_by_update">Ordenar segons l\última actualització</string>
<!--Log Fragment-->
<string name="menuSaveLog">Guardar registre</string>
<string name="menuReload">Recarregar</string>
<string name="menuClearLog">Netejar registre ara</string>
<string name="logs_cleared">Registre netejat correctament</string>
<string name="log_is_empty">El registre està buit</string>
<!--About Activity-->
<string name="app_changelog">Registre de canvis</string>
<string name="translators" />
<string name="app_translators">JoanVC100, QuitusAnbu27</string>
<!-- System Components, Notifications -->
<string name="update_channel">Actualització de Magisk</string>
<string name="progress_channel">Notificacions de progrés</string>
<string name="download_complete">Baixada completada</string>
<string name="download_file_error">Error en baixar l\'arxiu</string>
<string name="magisk_update_title">Actualització de Magisk disponible!</string>
<string name="manager_update_title">Actualització de Magisk Manager disponible!</string>
<!--Toasts, Dialogs-->
<string name="close">Tancar</string>
<string name="repo_install_title">Instal·lar %1$s</string>
<string name="repo_install_msg">Vols instal·lar %1$s ara?</string>
<string name="download">Baixar</string>
<string name="reboot">Reiniciar</string>
<string name="settings_reboot_toast">Reinicia per aplicar els canvis</string>
<string name="release_notes">Notes de llançament</string>
<string name="repo_cache_cleared">Memòria cau del repositori netejada</string>
<string name="internal_storage">El zip està emmagatzemat en:\n[Internal Storage]%1$s</string>
<string name="manager_download_install">Prem per descarregar i instal·lar.</string>
<string name="dtbo_patched_title">S\'ha arranjat DTBO</string>
<string name="dtbo_patched_reboot">Magisk Manager ha arranjat dtbo.img. Si us plau, reinicia el telèfon.</string>
<string name="flashing">Arranjament</string>
<string name="hide_manager_title">Amagant Magisk Manager…</string>
<string name="hide_manager_fail_toast">L\'amagament de Magisk Manager ha fallat.</string>
<string name="open_link_failed_toast">No s\'ha trobat una aplicació per obrir l\'enllaç.</string>
<string name="download_zip_only">Descarrega només el ZIP</string>
<string name="patch_boot_file">Arranja l\'imatge d\'arrencada</string>
<string name="direct_install">Instal·lació directa (Recomanat)</string>
<string name="install_inactive_slot">Instal·lar a la ranura inactiva (Després d\'una OTA)</string>
<string name="warning">Avís</string>
<string name="install_inactive_slot_msg">El teu dispositiu serà FORÇAT a arrancar en la ranura inactiva després de reiniciar!\nUtilitza aquesta opció només quan s\'hagi fet la OTA.\nContinuar?</string>
<string name="select_method">Selecciona mètode</string>
<string name="boot_file_patch_msg">Seleccioneu l\'arxiu de bolcat de l\'arrencada en format .img o img.tar.</string>
<string name="complete_uninstall">Desinstal·lació completa</string>
<string name="restore_img">Restaura imatges</string>
<string name="restore_img_msg">Restaurant…</string>
<string name="restore_done">Restauració feta!</string>
<string name="restore_fail">La còpia de seguretat de Stock no existeix!</string>
<string name="proprietary_title">Descarrega codi propietari</string>
<string name="proprietary_notice">Magisk Manager és codi lliure i no conté codi de l\'API de SafetyNet, ja que és codi propietari de Google.\n\nPot permetre que Magisk Manager descarregui una extensió que conté el GoogleApiClient per poder fer la comprobació de SafetyNet?</string>
<string name="setup_done">Instal·lació realitzada.</string>
<string name="setup_fail">Instal·lació fallida.</string>
<string name="env_fix_title">Es requereix instal·lació addicional</string>
<string name="env_fix_msg">El teu dispositiu necessita instal·lació addicional per Magisk per funcionar correctament. Es descarregarà el ZIP d\'instal·lació de Magisk , vol procedir a l\'instalació ara?</string>
<string name="setup_title">Instal·lació addicional</string>
<string name="setup_msg">S\'està executant la configuració de l\'entorn…</string>
<string name="downloading_toast">Descarregant %1$s</string>
<string name="no_rw_storage">Aquesta funció no funcionara si no es té permís per escriure a l\'emmagatzematge.</string>
<string name="dl_one_module">Descarrega només un mòdul a la vegada.</string>
<!--Settings Activity -->
<string name="settings_general_category">General</string>
<string name="settings_dark_theme_title">Tema obscur</string>
<string name="settings_dark_theme_summary">Habilitar el tema obscur</string>
<string name="settings_clear_cache_title">Netejar memòria cau del repositori</string>
<string name="settings_clear_cache_summary">Neteja linformació en memòria cau per als repositoris en línia, força a laplicació a actualitzar-se en línia.</string>
<string name="settings_hide_manager_title">Amagar Magisk Manager</string>
<string name="settings_hide_manager_summary">Re-empaquetar Magisk Manager amb un nom de paquet a latzar</string>
<string name="settings_restore_manager_title">Restaurar Magisk Manager</string>
<string name="settings_restore_manager_summary">Restaura Magisk Manager amb el nom de paquet original</string>
<string name="language">Idioma</string>
<string name="system_default">(Idioma del sistema)</string>
<string name="settings_update">Configuració dActualització</string>
<string name="settings_check_update_title">Comprovar Actualitzacions</string>
<string name="settings_check_update_summary">Comprovar periòdicament en segon pla si existeixen actualitzacions</string>
<string name="settings_update_channel_title">Canal dActualitzacions</string>
<string name="settings_update_stable">Estable</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalitzat</string>
<string name="settings_update_custom_msg">Inserta una URL personalitzada</string>
<string name="settings_boot_format_title">Arranja la imatge darrancada segons el tipus de format</string>
<string name="settings_boot_format_summary">Seleccionar el format de sortida per arranjar la imatge darrancada.\nTriï .img per flashejar mitcançant fastboot/download; triï .img.tar per flashejar amb ODIN.</string>
<string name="settings_core_only_title">Mode únicament nucli de Magisk</string>
<string name="settings_core_only_summary">Habilitar només les funcions principals, no es carregaran tots els mòduls. MagiskSU y MagiskHide seguirán habilitats</string>
<string name="settings_magiskhide_summary">Amagar Magisk de varies deteccions</string>
<string name="settings_hosts_title">Systemless Hosts</string>
<string name="settings_hosts_summary">Suport per aplicacions tipus Adblock fora de la partició del sistema</string>
<string name="settings_hosts_toast">Agregat el mòdul Systemless Hosts</string>
<string name="settings_su_app_adb">Aplicacions y ADB</string>
<string name="settings_su_app">Només aplicacions</string>
<string name="settings_su_adb">Només ADB</string>
<string name="settings_su_disable">Deshabilitat</string>
<string name="settings_su_request_10">10 segons</string>
<string name="settings_su_request_15">15 segons</string>
<string name="settings_su_request_20">20 segons</string>
<string name="settings_su_request_30">30 segons</string>
<string name="settings_su_request_45">45 segons</string>
<string name="settings_su_request_60">60 segons</string>
<string name="superuser_access">Accés de superusuari</string>
<string name="auto_response">Resposta automàtica</string>
<string name="request_timeout">Temps de petició</string>
<string name="superuser_notification">Notificació de superusuari</string>
<string name="request_timeout_summary">%1$d segons</string>
<string name="settings_su_reauth_title">Re-autenticació</string>
<string name="settings_su_reauth_summary">Demanar permisos de superusuari novament si una aplicació es actualitzada o reinstal·lada</string>
<string name="settings_su_fingerprint_title">Autenticació per Empremta Dactilar</string>
<string name="settings_su_fingerprint_summary">Utilitza el sensor dEmpremta Dactilar per permetre les sol·licituds de superusuari</string>
<string name="auth_fingerprint">Autenticar Emprempta Digital</string>
<string name="multiuser_mode">Mode Multiusuari</string>
<string name="settings_owner_only">Només Administrador del Dispositiu</string>
<string name="settings_owner_manage">Administrador del Dispositiu</string>
<string name="settings_user_independent">Usuari Independent</string>
<string name="owner_only_summary">Només l\administrador té accés d\'arrel</string>
<string name="owner_manage_summary"> Només l\administrador pot supervisar lacces d\'arrel y rebre sol·licituds daltres usuaris</string>
<string name="user_indepenent_summary">Tots els usuaris tenen separades les seves pròpies regles d\'arrel </string>
<string name="mount_namespace_mode">Muntar Namespace </string>
<string name="settings_ns_global">Namespace Global</string>
<string name="settings_ns_requester">Heretar Namespace</string>
<string name="settings_ns_isolate">Aïllar Namespace</string>
<string name="global_summary">Totes les sessions d\'arrel utilitzen el suport Namespace Global</string>
<string name="requester_summary">Les sessions d\'arrel heretaran les peticiones Namespace</string>
<string name="isolate_summary">Totes les sessions d\'arrel tindran la seva pròpia Namespace</string>
<string name="android_o_not_support">No es compatible amb Android 8.0+</string>
<string name="disable_fingerprint">No s\han establert empremtes dactilars o no existeix el suport del dispositiu</string>
<!--Superuser-->
<string name="su_request_title">Petició de superusuari</string>
<string name="deny_with_str">Denegar%1$s</string>
<string name="deny">Denegar</string>
<string name="prompt">Preguntar</string>
<string name="grant">Permetre</string>
<string name="su_warning">Permet accés total al teu dispositiu.\nDenega si no n\'està segur!</string>
<string name="forever">Sempre</string>
<string name="once">Un cop </string>
<string name="tenmin">10 mins</string>
<string name="twentymin">20 mins</string>
<string name="thirtymin">30 mins</string>
<string name="sixtymin">60 mins</string>
<string name="su_allow_toast">Permesos els drets de superusuari de %1$s</string>
<string name="su_deny_toast">Denegats els drets de superusuari de %1$s</string>
<string name="no_apps_found">No shan trobat aplicacions</string>
<string name="su_snack_grant">Drets de superusuari de %1$s permesos</string>
<string name="su_snack_deny"> Drets de superusuari de %1$s denegats</string>
<string name="su_snack_notif_on">Notificacions de %1$s habilitades</string>
<string name="su_snack_notif_off">Notificacions de %1$s deshabilitades</string>
<string name="su_snack_log_on">Registres de %1$s habilitats</string>
<string name="su_snack_log_off">Registres de %1$s deshabilitats</string>
<string name="su_snack_revoke">Anul·lats drets de %1$s</string>
<string name="su_revoke_title">¿Revocar?</string>
<string name="su_revoke_msg">Confirmi per revocar drets de %1$s</string>
<string name="toast">Avís</string>
<string name="none">Cap</string>
<string name="auth_fail">Autenticació fallida</string>
<!--Superuser logs-->
<string name="target_uid">UID de l\objectiu: %1$d</string>
<string name="command">Ordre: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Ensenya apps del sistema</string>
</resources>

View File

@@ -1,130 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Moduly</string>
<string name="downloads">Stahování</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Nastavení</string>
<string name="install">Instalovat</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk není nainstalován</string>
<string name="checking_for_updates">Kontrola aktualizací…</string>
<string name="safetyNet_check_text">Kliknutím zahájíte SafetyNet kontrolu</string>
<string name="checking_safetyNet_status">Kontrola stavu SafetyNet…</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Pokročilá Nastavení</string>
<string name="keep_force_encryption">Udržet "force encryption"</string>
<string name="keep_dm_verity">Udržet AVB 2.0/dm-verity</string>
<string name="current_installed">Nainstalovaná: %1$s</string>
<string name="latest_version">Poslední: %1$s</string>
<string name="uninstall">Odinstalovat</string>
<string name="uninstall_magisk_title">Odinstalovat Magisk</string>
<!--Module Fragment-->
<string name="no_info_provided">(Žádné info)</string>
<string name="no_modules_found">Žádný modul nenalezen</string>
<string name="update_file_created">Modul bude aktualizován během příštího restartu</string>
<string name="remove_file_created">Modul bude smazán během příštího restartu</string>
<string name="remove_file_deleted">Modul nebude smazán během příštího restartu</string>
<string name="disable_file_created">Modul bude zakázán během příštího restartu</string>
<string name="disable_file_removed">Modul bude povolen během příštího restartu</string>
<string name="author">Vytvořeno %1$s</string>
<!--Repo Fragment-->
<string name="update_available">Dostupná Aktualizace</string>
<string name="installed">Nainstalováno</string>
<string name="not_installed">Nenainstalováno</string>
<!--Log Fragment-->
<string name="menuSaveLog">Uložit log</string>
<string name="menuReload">Aktualizovat</string>
<string name="menuClearLog">Smazat Log</string>
<string name="logs_cleared">Log byl smazán</string>
<string name="log_is_empty">Log je prázdný</string>
<!--About Activity-->
<string name="app_changelog">Seznam změn</string>
<string name="translators" />
<string name="app_translators">Překladatelé aplikace</string>
<!--Toasts, Dialogs-->
<string name="close">Zavřít</string>
<string name="repo_install_title">Instalovat %1$s</string>
<string name="repo_install_msg">Chcete nainstalovat %1$s ?</string>
<string name="download">Stáhnout</string>
<string name="reboot">Restart</string>
<string name="magisk_update_title">K dispozici je aktualizace Magisk!</string>
<string name="settings_reboot_toast">Restartovat pro použití nastavení</string>
<string name="release_notes">Poznámky k vydání</string>
<string name="repo_cache_cleared">Mezipaměť smazána</string>
<string name="internal_storage">Zip je uchován v:\n[Interním Úložišti]%1$s</string>
<string name="download_file_error">Chyba při Stahování souboru</string>
<string name="downloading_toast">Stahování %1$s</string>
<string name="no_rw_storage">Tato funkce nebude fungovat bez povolení k zápisu na externí úložiště.</string>
<!--Settings Activity -->
<string name="settings_general_category">Obecné</string>
<string name="settings_dark_theme_title">Tmavý Vzhled</string>
<string name="settings_dark_theme_summary">Povolit tmavý vzhled</string>
<string name="settings_clear_cache_title">Smazat Uchovanou Mezipaměť</string>
<string name="settings_clear_cache_summary">Smaže informace online použití v Mezipaměti, donutí aplikaci obnovit informace online</string>
<string name="settings_magiskhide_summary">Skryje root (MagiskSU) před různými aplikacemi</string>
<string name="settings_hosts_title">Nesystémová "hosts" data</string>
<string name="settings_hosts_summary">Podpora nesystémových dat "hosts" pro Adblock aplikace</string>
<string name="settings_su_app_adb">Aplikace i ADB</string>
<string name="settings_su_app">Pouze aplikace</string>
<string name="settings_su_adb">Pouze ADB</string>
<string name="settings_su_disable">Zakázáno</string>
<string name="settings_su_request_10">10 sekund</string>
<string name="settings_su_request_15">15 sekund</string>
<string name="settings_su_request_20">20 sekund</string>
<string name="settings_su_request_30">30 sekund</string>
<string name="settings_su_request_45">45 sekund</string>
<string name="settings_su_request_60">60 sekund</string>
<string name="superuser_access">Přístup Superuser</string>
<string name="auto_response">Automatická Reakce</string>
<string name="request_timeout">Časový limit Požadavku</string>
<string name="superuser_notification">Oznámení Superuser</string>
<string name="request_timeout_summary">%1$d sekund</string>
<!--Superuser-->
<string name="su_request_title">Požadavek Superuser</string>
<string name="deny_with_str">Zamítnout%1$s</string>
<string name="deny">Zamítnout</string>
<string name="prompt">Dotaz</string>
<string name="grant">Povolit</string>
<string name="su_warning">Povolí plný přístup k vašemu zařízení.\nZamítněte pokud si nejste jisti!</string>
<string name="forever">Navždy</string>
<string name="once">Jednou</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">Pro %1$s bylo oprávnění Superuser povoleno</string>
<string name="su_deny_toast">Pro %1$s bylo oprávnění Superuser zamítnuto</string>
<string name="no_apps_found">Zatím zde není žádná aplikace</string>
<string name="su_snack_grant">Superuser oprávnění pro %1$s je povoleno</string>
<string name="su_snack_deny">Superuser oprávnění pro %1$s je zamítnuto</string>
<string name="su_snack_notif_on">Oznámení pro %1$s je povoleno</string>
<string name="su_snack_notif_off">Oznámení pro %1$s je zakázáno</string>
<string name="su_snack_log_on">Logování %1$s je povoleno</string>
<string name="su_snack_log_off">Logování %1$s je zakázáno</string>
<string name="su_snack_revoke">Záznamy oprávnění %1$s jsou smazány</string>
<string name="su_revoke_title">Smazat?</string>
<string name="su_revoke_msg">Smazat záznam ohledně oprávnění pro %1$s?</string>
<string name="toast">Toast</string>
<string name="none">Žádné</string>
<!--Superuser logs-->
<string name="target_uid">Cílové UID: %1$d</string>
<string name="command">Příkaz: %1$s</string>
</resources>

View File

@@ -1,211 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Module</string>
<string name="downloads">Downloads</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Einstellungen</string>
<string name="install">Installieren</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk ist nicht installiert</string>
<string name="checking_for_updates">Suche nach Aktualisierungen…</string>
<string name="invalid_update_channel">Ungültiger Aktualisierungskanal</string>
<string name="safetyNet_check_text">SafetyNet-Status abfragen</string>
<string name="checking_safetyNet_status">Prüfe SafetyNet-Status…</string>
<string name="safetyNet_check_success">SafetyNet-Test erfolgreich</string>
<string name="safetyNet_api_error">SafetyNet API Fehler</string>
<string name="safetyNet_res_invalid">Die Antwort ist ungültig</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Erweiterte Optionen</string>
<string name="keep_force_encryption">\"force encryption\" beibehalten</string>
<string name="keep_dm_verity">AVB 2.0/dm-verity beibehalten</string>
<string name="current_installed">Installierte: %1$s</string>
<string name="latest_version">Neueste: %1$s</string>
<string name="uninstall">Deinstallieren</string>
<string name="uninstall_magisk_title">Magisk deinstallieren</string>
<string name="uninstall_magisk_msg">Alle Module werden deaktiviert/entfernt. Root wird entfernt und möglicherweise werden Ihre Daten verschlüsseln, falls Ihre Daten derzeit nicht verschlüsselt sind.</string>
<string name="update">Aktualisierung</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nichts angegeben)</string>
<string name="no_modules_found">Keine Module gefunden</string>
<string name="update_file_created">Modul wird beim nächsten Neustart aktualisiert</string>
<string name="remove_file_created">Modul wird beim nächsten Neustart entfernt</string>
<string name="remove_file_deleted">Modul wird beim nächsten Neustart nicht entfernt</string>
<string name="disable_file_created">Modul wird beim nächsten Neustart deaktiviert</string>
<string name="disable_file_removed">Modul wird beim nächsten Neustart aktiviert</string>
<string name="author">Erstellt von %1$s</string>
<string name="reboot_recovery">Neustart in das Recovery</string>
<string name="reboot_bootloader">Neustart in den Bootloader</string>
<string name="reboot_download">Neustart in den Download-Modus</string>
<!--Repo Fragment-->
<string name="update_available">Aktualisierung verfügbar</string>
<string name="installed">Installiert</string>
<string name="not_installed">Nicht installiert</string>
<string name="updated_on">Zuletzt aktualisiert: %1$s</string>
<string name="sorting_order">Sortierung</string>
<string name="sort_by_name">Nach Namen sortiert</string>
<string name="sort_by_update">Nach Aktualisierungsdatum sortiert</string>
<!--Log Fragment-->
<string name="menuSaveLog">Log speichern</string>
<string name="menuReload">Log erneut laden</string>
<string name="menuClearLog">Log löschen</string>
<string name="logs_cleared">Log gelöscht</string>
<string name="log_is_empty">Log ist leer</string>
<!--About Activity-->
<string name="app_changelog">Änderungsprotokoll</string>
<string name="translators">skalnet, c727, jenslody, SuperSandro2000</string>
<string name="app_translators">Übersetzer</string>
<!--Toasts, Dialogs-->
<string name="close">Schließen</string>
<string name="repo_install_title">Installiere %1$s</string>
<string name="repo_install_msg">Möchtest du %1$s installieren?</string>
<string name="download">Herunterladen</string>
<string name="reboot">Neustart</string>
<string name="magisk_update_title">Neue Magisk Update verfügbar!</string>
<string name="settings_reboot_toast">Neustarten, um die Änderungen zu übernehmen</string>
<string name="release_notes">Versionshinweise</string>
<string name="repo_cache_cleared">Repo-Cache geleert</string>
<string name="internal_storage">Die Zip-Datei ist gespeichert unter:\n[Interner Speicher]%1$s</string>
<string name="manager_update_title">Aktualisierung für Magisk Manager verfügbar!</string>
<string name="manager_download_install">Herunterladen und installieren</string>
<string name="dtbo_patched_title">DTBO wurde gepatched!</string>
<string name="dtbo_patched_reboot">Magisk Manager hat dtbo.img gepatched, bitte neustarten</string>
<string name="update_channel">Magisk Update</string>
<string name="flashing">Flashing</string>
<string name="hide_manager_title">Verberge Magisk Manager…</string>
<string name="hide_manager_fail_toast">Verbergen von Magisk Manager fehlgeschlagen…</string>
<string name="open_link_failed_toast">Es wurde keine Anwendung gefunden, um diesen Link zu öffnen...</string>
<string name="download_zip_only">Nur Zip-Datei herunterladen</string>
<string name="patch_boot_file">Boot-Image-Datei patchen</string>
<string name="direct_install">Direkt installieren (empfohlen)</string>
<string name="install_inactive_slot">Installiere auf inaktiven Slot (Nach OTA)</string>
<string name="warning">Warnung</string>
<string name="install_inactive_slot_msg">Dein Gerät wird GEZWUNGEN in den aktuell inaktiven Slot zu starten, nachdem nach dem ein Neustart durchgeführt wurde!\nBenutze diese Option nur, nachdem das OTA beendet wurde.\nFortsetzen?</string>
<string name="select_method">Methode auswählen</string>
<string name="boot_file_patch_msg">Wähle das original Boot-Image-Dump im Format .img oder .img.tar</string>
<string name="complete_uninstall">Komplette Deinstallation</string>
<string name="restore_img">Images wiederherstellen</string>
<string name="restore_img_msg">Wiederherstellen...</string>
<string name="restore_done">Wiederherstellung erfolgreich!</string>
<string name="restore_fail">Kein Original Backup vorhanden!</string>
<string name="proprietary_title">Lade proprietären Code herunter</string>
<string name="proprietary_notice">Magisk Manager ist FOSS und enthält keinen proprietären SafetyNet API Code von Google. Magisk Manager erlauben eine Erweiterung (enthält GoogleApiClient) für SafetyNet-Checks herunterzuladen?</string>
<string name="setup_done">Einrichtung abgeschlossen</string>
<string name="setup_fail">Einrichtung fehlgeschlagen</string>
<string name="env_fix_title">Zusätzliche Einrichtung erforderlich</string>
<string name="env_fix_msg">Ihr Gerät benötigt zusätzliche Einrichtung, damit Magisk ordnungsgemäß funktioniert. Es wird eine Magisk-Installations-Zip wird heruntergeladen, fortfahren?</string>
<string name="setup_title">Zusätzliche Einrichtung</string>
<string name="setup_msg">Umgebungseinrichtung läuft…</string>
<string name="download_file_error">Fehler beim Herunterladen der Datei</string>
<string name="downloading_toast">Herunterladen von %1$s</string>
<string name="no_rw_storage">Dieses Feature funktioniert nicht, ohne die Berechtigung den externen Speicher zu beschreiben.</string>
<!--Settings Activity -->
<string name="settings_general_category">Allgemein</string>
<string name="settings_dark_theme_title">Dunkles Theme</string>
<string name="settings_dark_theme_summary">Dunkles Theme aktivieren</string>
<string name="settings_clear_cache_title">Repo-Cache leeren</string>
<string name="settings_clear_cache_summary">Löscht die zwischengespeicherten Informationen des Online-Repos. Erzwingt eine Aktualisierung</string>
<string name="settings_hide_manager_title">Magisk Manager verbergen</string>
<string name="settings_hide_manager_summary">Magisk Manager mit zufälligem Paketnamen neu packen</string>
<string name="settings_restore_manager_title">Magisk Manager wiederherstellen</string>
<string name="settings_restore_manager_summary">Stellt Magisk Manager mit ursprünglichem Paketnamen wieder her</string>
<string name="language">Sprache</string>
<string name="system_default">(Systemstandard)</string>
<string name="settings_update">Aktualisierungs-Einstellungen</string>
<string name="settings_check_update_title">Prüfe nach Aktualisierungen</string>
<string name="settings_check_update_summary">Prüfe regelmäßig im Hintergrund nach Aktualisierungen</string>
<string name="settings_update_channel_title">Aktualisierungs-Kanal</string>
<string name="settings_update_stable">Stabil</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Benutzerdefiniert</string>
<string name="settings_update_custom_msg">Gib eine benutzerdefinierte URL ein</string>
<string name="settings_boot_format_title">Ausgabeformat des gepatchten Boot-Images</string>
<string name="settings_boot_format_summary">Wähle das Ausgabeformat des gepatchten Boot-Images.\nWähle .img, um mit \"fastboot/download mode\" zu flashen; wähle .img.tar zum Flashen mit ODIN.</string>
<string name="settings_core_only_title">Nur Kernfunktionen</string>
<string name="settings_core_only_summary">Aktiviert lediglich die Kernfunktionen, Module werden nicht geladen. MagiskSU und Magisk Hide bleiben weiterhin aktiv</string>
<string name="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
<string name="settings_hosts_title">Systemlose Hosts-Datei</string>
<string name="settings_hosts_summary">Systemlose Unterstützung für Werbeblocker</string>
<string name="settings_su_app_adb">Apps und ADB</string>
<string name="settings_su_app">Nur Apps</string>
<string name="settings_su_adb">Nur ADB</string>
<string name="settings_su_disable">Deaktiviert</string>
<string name="settings_su_request_10">10 Sekunden</string>
<string name="settings_su_request_15">15 Sekunden</string>
<string name="settings_su_request_20">20 Sekunden</string>
<string name="settings_su_request_30">30 Sekunden</string>
<string name="settings_su_request_45">45 Sekunden</string>
<string name="settings_su_request_60">60 Sekunden</string>
<string name="superuser_access">Superuser-Zugriff</string>
<string name="auto_response">Automatisch beantworten</string>
<string name="request_timeout">Zeitlimit für Anfrage</string>
<string name="superuser_notification">Superuser-Benachrichtigung</string>
<string name="request_timeout_summary">%1$d Sekunden</string>
<string name="settings_su_reauth_title">Nach Aktualisierung erneut authentifizieren</string>
<string name="settings_su_reauth_summary">Superuser-Zugriff nach App-Aktualisierung erneut abfragen</string>
<string name="settings_su_fingerprint_title">Aktiviere Authentifizierung durch Fingerabdruck</string>
<string name="settings_su_fingerprint_summary">Fingerabdrucksensor benutzen um Superuser-Anfragen zu erlauben</string>
<string name="auth_fingerprint">Authentifiziere Fingerabdruck</string>
<string name="multiuser_mode">Mehrbenutzermodus</string>
<string name="settings_owner_only">Nur der Gerätebesitzer</string>
<string name="settings_owner_manage">Durch Gerätebesitzer verwaltet</string>
<string name="settings_user_independent">Benutzerunabhängig</string>
<string name="owner_only_summary">Nur der Besitzer hat Root-Zugriff</string>
<string name="owner_manage_summary">Nur der Besitzer verwaltet den Root-Zugriff und erhält Zugriffs-Anfragen</string>
<string name="user_indepenent_summary">Jeder Nutzer hat seine eingenen Root-Regeln</string>
<string name="mount_namespace_mode">Mount-Namespace-Modus</string>
<string name="settings_ns_global">Globaler Namespace</string>
<string name="settings_ns_requester">Geerbter Namespace</string>
<string name="settings_ns_isolate">Isolierter Namespace</string>
<string name="global_summary">Alle Root-Sitzungen benutzen den global angelegten Namespace</string>
<string name="requester_summary">Root-Sitzungen erben den Namespace des Abfragenden</string>
<string name="isolate_summary">Jede Root-Sitzung hat ihren isolierten Namespace</string>
<string name="android_o_not_support">Android 8.0+ wird nicht unterstützt</string>
<string name="disable_fingerprint">Keine Fingerabdrücke gespeichert oder keine Geräteunterstützung</string>
<!--Superuser-->
<string name="su_request_title">Superuser-Anfrage</string>
<string name="deny_with_str">Verweigern%1$s</string>
<string name="deny">Verweigern</string>
<string name="prompt">Nachfragen</string>
<string name="grant">Gewähren</string>
<string name="su_warning">Erlaubt den vollen Zugriff auf das Gerät.\nVerweigere, wenn du dir unsicher bist!</string>
<string name="forever">Dauerhaft</string>
<string name="once">Einmalig</string>
<string name="tenmin">10 Min.</string>
<string name="twentymin">20 Min.</string>
<string name="thirtymin">30 Min.</string>
<string name="sixtymin">60 Min.</string>
<string name="su_allow_toast">Superuser-Rechte für %1$s gewährt</string>
<string name="su_deny_toast">Superuser-Rechte für %1$s verweigert</string>
<string name="no_apps_found">Keine Apps gefunden</string>
<string name="su_snack_grant">Superuser-Rechte werden für %1$s gewährt</string>
<string name="su_snack_deny">Superuser-Rechte werden für %1$s verweigert</string>
<string name="su_snack_notif_on">Benachrichtigungen sind für %1$s aktiviert</string>
<string name="su_snack_notif_off">Benachrichtigungen sind für %1$s deaktiviert</string>
<string name="su_snack_log_on">Logging ist für %1$s aktiviert</string>
<string name="su_snack_log_off">Logging ist für %1$s deaktiviert</string>
<string name="su_snack_revoke">Die Rechte für %1$s wurden entzogen</string>
<string name="su_revoke_title">Entziehen?</string>
<string name="su_revoke_msg">Möchtest du die Rechte für %1$s entziehen?</string>
<string name="toast">Popup</string>
<string name="none">Keine</string>
<string name="auth_fail">Authentifizierung fehlgeschlagen</string>
<!--Superuser logs-->
<string name="target_uid">Ziel-UID: %1$d</string>
<string name="command">Befehl: %1$s</string>
</resources>

View File

@@ -1,190 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Modules</string>
<string name="downloads">Λήψεις</string>
<string name="superuser">Υπερχρήστης</string>
<string name="log">Αρχείο Καταγραφής</string>
<string name="settings">Ρυθμίσεις</string>
<string name="install">Εγκατάσταση</string>
<!--Status Fragment-->
<string name="magisk_version_error">Το Magisk δεν είναι εγκατεστημένο</string>
<string name="checking_for_updates">Έλεγχος για ενημερώσεις…</string>
<string name="invalid_update_channel">Λανθασμένο κανάλι ενημέρωσης</string>
<string name="safetyNet_check_text">Πατήστε για έλεγχο του SafetyNet</string>
<string name="checking_safetyNet_status">Έλεγχος κατάστασης SafetyNet…</string>
<string name="safetyNet_check_success">Ο Έλεγχος του SafetyNet Ήταν Επιτυχής</string>
<string name="safetyNet_api_error">Σφάλμα του SafetyNet API</string>
<string name="safetyNet_res_invalid">Η απόκριση είναι άκυρη</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Προηγμένες ρυθμίσεις</string>
<string name="keep_force_encryption">Διατήρηση επιβεβλημένης κρυπτογράφησης</string>
<string name="keep_dm_verity">Διατήρηση dm-verity</string>
<string name="current_installed">Εγκατεστημένη: %1$s</string>
<string name="latest_version">Τελευταία: %1$s</string>
<string name="uninstall">Απεγκατάσταση</string>
<string name="uninstall_magisk_title">Απεγκατάσταση Magisk</string>
<string name="uninstall_magisk_msg">Όλα τα modules θα απενεργοποιηθούν/αφαιρεθούν. Το root θα αφαιρεθεί και ενδέχεται να κρυπτογραφηθούν τα δεδομένα σας, εάν δεν είναι κρυπτογραφημένα</string>
<string name="update">Ενημέρωση</string>
<!--Module Fragment-->
<string name="no_info_provided">(Δεν δόθηκαν πληροφορίες)</string>
<string name="no_modules_found">Δεν βρέθηκαν modules</string>
<string name="update_file_created">Η ενότητα θα ενημερωθεί στην επόμενη επανεκκίνηση</string>
<string name="remove_file_created">Η ενότητα θα αφαιρεθεί στην επόμενη επανεκκίνηση</string>
<string name="remove_file_deleted">Η ενότητα δεν θα αφαιρεθεί στην επόμενη επανεκκίνηση</string>
<string name="disable_file_created">Η ενότητα θα απενεργοποιηθεί στην επόμενη επανεκκίνηση</string>
<string name="disable_file_removed">Η ενότητα θα ενεργοποιηθεί στην επόμενη επανεκκίνηση</string>
<string name="author">Δημιουργήθηκε από τον/την %1$s</string>
<string name="reboot_recovery">Επανεκκίνηση στο Recovery</string>
<string name="reboot_bootloader">Επανεκκίνηση στο Bootloader</string>
<string name="reboot_download">Επανεκκίνηση για λήψη</string>
<!--Repo Fragment-->
<string name="update_available">Διαθέσιμη Ενημέρωση</string>
<string name="installed">Εγκαταστάθηκε</string>
<string name="not_installed">Μη εγκατεστημένη</string>
<string name="updated_on">Αναβαθμίστηκε στις: %1$s</string>
<string name="sorting_order">Ταξινόμηση κατά</string>
<string name="sort_by_name">Ταξινόμηση κατά όνομα</string>
<string name="sort_by_update">Ταξινόμηση κατά τελευταία αναβάθμιση</string>
<!--Log Fragment-->
<string name="menuSaveLog">"Αποθήκευση καταγραφής "</string>
<string name="menuReload">Επαναφόρτωση</string>
<string name="menuClearLog">Εκκαθάριση αρχείου καταγραφής τώρα</string>
<string name="logs_cleared">Το αρχείο καταγραφής εκκαθαρίστηκε επιτυχώς</string>
<string name="log_is_empty">Το αρχείο καταγραφής είναι κενό</string>
<!--About Activity-->
<string name="app_changelog">Καταγραφή αλλαγών εφαρμογής</string>
<string name="translators">GreatApo, JpegXguy</string>
<string name="app_translators">Μεταφραστές εφαρμογής</string>
<!--Toasts, Dialogs-->
<string name="close">Κλείσιμο</string>
<string name="repo_install_title">Εγκατάσταση %1$s</string>
<string name="repo_install_msg">Θέλετε να εγκαταστήσετε το %1$s τώρα;</string>
<string name="download">Λήψη</string>
<string name="reboot">Επανεκκίνηση</string>
<string name="magisk_update_title">Νέα Ενημέρωση Magisk Διαθέσιμη!</string>
<string name="settings_reboot_toast">Επανεκκίνηση για εφαρμογή ρυθμίσεων</string>
<string name="release_notes">Σημειώσεις έκδοσης</string>
<string name="repo_cache_cleared">Η Repo cache καθαρίστηκε</string>
<string name="internal_storage">Το zip είναι αποθηκευμένο σε:\n[Εσωτερική μνήμη]%1$s</string>
<string name="manager_update_title">Νέα Ενημέρωση Magisk Manager Διαθέσιμη!</string>
<string name="manager_download_install">Πιέστε για λήψη και εγκατάσταση</string>
<string name="dtbo_patched_title">Έγινε patch στο DTBO!</string>
<string name="dtbo_patched_reboot">Το Magisk Manager έκανε patch το dtbo.img, παρακαλώ κάντε επανεκκίνηση</string>
<string name="update_channel">Ενημερώσεις Magisk</string>
<string name="flashing">Γίνεται flash</string>
<string name="hide_manager_title">Κρύβοντας το Magisk Manager…</string>
<string name="hide_manager_fail_toast">Η απόκρυψη του Magisk Manager απέτυχε…</string>
<string name="download_zip_only">Λήψη Zip Μόνο</string>
<string name="patch_boot_file">Εφαρμογή Patch στο Αρχείο Εικόνας Boot</string>
<string name="direct_install">Απευθείας Εγκατάσταση (Προτείνεται)</string>
<string name="select_method">Επιλογή Μεθόδου</string>
<string name="boot_file_patch_msg">Επιλογή stock boot image dump σε μορφή .img ή .img.tar</string>
<string name="complete_uninstall">Πλήρης απεγκατάσταση</string>
<string name="restore_done">Η ανάκτηση έγινε!</string>
<string name="restore_fail">Δεν υπάρχει αντίγραφο ασφαλείας!</string>
<string name="proprietary_title">Λήψη Ιδιόκτητου Κώδικα</string>
<string name="proprietary_notice">Το Magisk Manager είναι FOSS οπότε δεν περιέχει της Google τον ιδιόκτητο κώδικα του SafetyNet API.\n\nΕπιτρέπετε στο Magisk Manager να κατεβάσει μια επέκταση (περιέχει το GoogleApiClient) για ελέγχους του SafetyNet?</string>
<string name="download_file_error">Σφάλμα στη λήψη του αρχείου</string>
<string name="downloading_toast">Κατέβασμα %1$s</string>
<string name="no_rw_storage">Η λειτουργία αυτή δεν θα δουλέψει χωρίς την άδεια εγγραφής στον εξωτερικό χώρο αποθηκεύσης.</string>
<!--Settings Activity -->
<string name="settings_general_category">Γενικά</string>
<string name="settings_dark_theme_title">Σκούρο θέμα</string>
<string name="settings_dark_theme_summary">Ενεργοποίηση σκούρου θέματος</string>
<string name="settings_clear_cache_title">Εκκαθάριση προσωρινής μνήμης αποθετηρίων</string>
<string name="settings_clear_cache_summary">Καθαρίζει τις κρυφές πληροφορίες για απευθείας συνδεδεμένα αποθετήρια, αναγκάζει την εφαρμογή να κάνει ανανέωση σε απευθείας σύνδεση</string>
<string name="settings_hide_manager_title">Απόκρυψη του Magisk Manager</string>
<string name="settings_hide_manager_summary">Ανασυγκρότηση του Magisk Manager με τυχαίο όνομα πακέτου</string>
<string name="language">Γλώσσα</string>
<string name="system_default">(Προεπιλογή Συστήματος)</string>
<string name="settings_update">Ρυθμίσεις Ενημερώσεων</string>
<string name="settings_update_channel_title">Κανάλι Ενημερώσεων</string>
<string name="settings_update_stable">Σταθερό</string>
<string name="settings_update_beta">Δοκιμαστικό</string>
<string name="settings_update_custom">Custom</string>
<string name="settings_update_custom_msg">Εισαγωγή ενός custom URL</string>
<string name="settings_boot_format_title">Μορφή Τροποποιημένης Εικόνας Boot</string>
<string name="settings_boot_format_summary">Επιλέξτε τη μορφή της εξαγόμενης εικόνας boot μετά το patch.\nΕπιλέξτε .img για flash μέσω λειτουργίας fastboot/download· επιλέξτε .img.tar για flash μέσω ODIN.</string>
<string name="settings_core_only_title">Magisk Λειτουργία Πυρήνα Μόνο</string>
<string name="settings_core_only_summary">Ενεργοποίηση μόνο των λειτουργιών πυρήνα, καμία από τις ενότητες δεν θα ενεργοποιηθεί. Τα MagiskSU και MagiskHide θα παραμείνουν ενεργά</string>
<string name="settings_magiskhide_summary">Κρύβει το Magisk από διάφορες ανιχνεύσεις</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Υποστήριξη Systemless hosts για εφαρμογές Adblock</string>
<string name="settings_su_app_adb">Εφαρμογές και ADB</string>
<string name="settings_su_app">Εφαρμογές μόνο</string>
<string name="settings_su_adb">ADB μόνο</string>
<string name="settings_su_disable">Απενεργοποιημένο</string>
<string name="settings_su_request_10">10 δευτερόλεπτα</string>
<string name="settings_su_request_15">15 δευτερόλεπτα</string>
<string name="settings_su_request_20">20 δευτερόλεπτα</string>
<string name="settings_su_request_30">30 δευτερόλεπτα</string>
<string name="settings_su_request_45">45 δευτερόλεπτα</string>
<string name="settings_su_request_60">60 δευτερόλεπτα</string>
<string name="superuser_access">Πρόσβαση Υπερχρήστη</string>
<string name="auto_response">Αυτόματη Απόκριση</string>
<string name="request_timeout">Χρονικό όριο Αιτήματος</string>
<string name="superuser_notification">Ειδοποίηση Υπερχρήστη</string>
<string name="request_timeout_summary">%1$d δευτερόλεπτα</string>
<string name="settings_su_reauth_title">Επαναπιστοποίηση μετά από αναβάθμιση</string>
<string name="settings_su_reauth_summary">Επαναπιστοποίηση αδειών υπερχρήστη μετά την αναβάθμιση μίας εφαρμογής</string>
<string name="multiuser_mode">Λειτουργία Πολλών Χρηστών</string>
<string name="settings_owner_only">Μόνο Ιδιοκτήτης Συσκευής</string>
<string name="settings_owner_manage">Διαχειριζόμενη από τον Ιδιοκτήτη</string>
<string name="settings_user_independent">Ανεξάρτητη από τον χρήστη</string>
<string name="owner_only_summary">Μόνο ο ιδιοκτήτης έχει πρόσβαση root</string>
<string name="owner_manage_summary">Μόνο ο ιδιοκτήτης μπορεί να διαχειριστεί την πρόσβαση root και να δεχτεί προτροπές αίτημάτων</string>
<string name="user_indepenent_summary">Κάθε χρήστης έχει τους δικούς του ξεχωριστούς κανόνες root</string>
<string name="mount_namespace_mode">Λειτουργία προσάρτησης χώρου ονομάτων</string>
<string name="settings_ns_global">Καθολικός Χώρος Ονομάτων</string>
<string name="settings_ns_requester">Κληρονόμησε Χώρο Ονομάτων</string>
<string name="settings_ns_isolate">Απομονωμένος Χώρος Ονομάτων</string>
<string name="global_summary">Όλες οι συνεδρίες root χρησιμοποιούν τον καθολικό χώρο oνομάτων προσάρτησης</string>
<string name="requester_summary">Οι συνεδρίες root θα κληρονομούν το χώρο ονομάτων του αιτούντα τους</string>
<string name="isolate_summary">Κάθε συνεδρία root θα έχει το δικό της απομονωμένο χώρο ονομάτων</string>
<string name="android_o_not_support">Δεν υποστηρίζεται Android 8.0+</string>
<!--Superuser-->
<string name="su_request_title">Αίτημα υπερχρήστη</string>
<string name="deny_with_str">Άρνηση%1$s</string>
<string name="deny">Άρνηση</string>
<string name="prompt">Προτροπή</string>
<string name="grant">Αποδοχή</string>
<string name="su_warning">Δίνει πλήρη πρόσβαση στη συσκευή σας.\nΑρνηθείτε αν δεν είστε σίγουρος/η!</string>
<string name="forever">Πάντα</string>
<string name="once">Μία φορά</string>
<string name="tenmin">10 λεπτά</string>
<string name="twentymin">20 λεπτά</string>
<string name="thirtymin">30 λεπτά</string>
<string name="sixtymin">60 λεπτά</string>
<string name="su_allow_toast">Παραχωρήθηκαν δικαιώματα υπερχρήστη στο %1$s</string>
<string name="su_deny_toast">Απορρίφθηκαν τα δικαιώματα υπερχρήστη του %1$s</string>
<string name="no_apps_found">Δεν βρέθηκαν εφαρμογές</string>
<string name="su_snack_grant">Παραχορούνται δικαιώματα υπερχρήστη στο %1$s</string>
<string name="su_snack_deny">Δεν παραχορούνται δικαιώματα υπερχρήστη στο %1$s</string>
<string name="su_snack_notif_on">Οι ειδοποιήσεις του %1$s είναι ενεργοποιημένες</string>
<string name="su_snack_notif_off">Οι ειδοποιήσεις του %1$s είναι απενεργοποιημένες</string>
<string name="su_snack_log_on">Η καταγραφή του %1$s είναι ενεργοποιημένη</string>
<string name="su_snack_log_off">Η καταγραφή του %1$s είναι απενεργοποιημένη</string>
<string name="su_snack_revoke">Τα δικαιώματα του %1$s ανακαλούνται</string>
<string name="su_revoke_title">Ανάκληση;</string>
<string name="su_revoke_msg">Επιβεβαίωση για ανάκληση δικαιωμάτων %1$s;</string>
<string name="toast">Αναδυόμενο παράθυρο</string>
<string name="none">Κανένα</string>
<!--Superuser logs-->
<string name="target_uid">UID Στόχος: %1$d</string>
<string name="command">Εντολή: %1$s</string>
</resources>

View File

@@ -1,222 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Módulos</string>
<string name="downloads">Descargas</string>
<string name="superuser">Superusuario</string>
<string name="log">Registro</string>
<string name="settings">Ajustes</string>
<string name="install">Instalar</string>
<string name="unsupport_magisk_title">Versión Magisk no soportada</string>
<string name="unsupport_magisk_message">Esta versión de Magisk Manager no admite una versión de Magisk inferior a la v18.0.\n\nPuede actualizar Magisk de forma manual o instalar una versión anterior de la aplicación.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk no está instalado</string>
<string name="checking_for_updates">Comprobando Actualizaciones…</string>
<string name="invalid_update_channel">Canal de actualización inválido</string>
<string name="safetyNet_check_text">Comprobar el estado de SafetyNet</string>
<string name="checking_safetyNet_status">Comprobando estado de SafetyNet…</string>
<string name="safetyNet_check_success">La comprobación fue exitosa</string>
<string name="safetyNet_api_error">Error en la API de SafetyNet</string>
<string name="safetyNet_res_invalid">La respuesta no es válida</string>
<string name="magisk_up_to_date">Magisk está actualizado.</string>
<string name="manager_up_to_date">Magisk Manager está actualizado.</string>
<string name="advanced_settings_title">Ajustes avanzados</string>
<string name="keep_force_encryption">Mantener cifrado forzado</string>
<string name="keep_dm_verity">Mantener AVB 2.0/dm-verity</string>
<string name="current_installed">Instalada: %1$s</string>
<string name="latest_version">Última: %1$s</string>
<string name="uninstall">Desinstalar</string>
<string name="uninstall_magisk_msg">Todos los módulos serán desactivados / eliminados. El acceso Root se eliminará y, posiblemente, cifrará los datos si los datos no están cifrados actualmente.</string>
<string name="uninstall_magisk_title">Desinstalar Magisk</string>
<string name="update">Actualizar</string>
<string name="core_only_enabled">(Core Only Mode Habilitado)</string>
<!--Module Fragment-->
<string name="no_info_provided">(No hay información)</string>
<string name="no_modules_found">No se encontraron módulos</string>
<string name="update_file_created">El módulo se actualizará en el siguiente reinicio</string>
<string name="remove_file_created">El módulo se eliminará en el siguiente reinicio</string>
<string name="remove_file_deleted">El módulo no se eliminará en el siguiente reinicio</string>
<string name="disable_file_created">El módulo se desactivará en el siguiente reinicio</string>
<string name="disable_file_removed">El módulo se activará en el siguiente reinicio</string>
<string name="author">Creado por %1$s</string>
<string name="reboot_recovery">Reiniciar en Modo Recovery</string>
<string name="reboot_bootloader">Reiniciar en Modo Bootloader</string>
<string name="reboot_download">Reiniciar en Modo Download</string>
<!--Repo Fragment-->
<string name="update_available">Actualización Disponible</string>
<string name="installed">Instalado</string>
<string name="not_installed">No Instalado</string>
<string name="updated_on">Actualizado el: %1$s</string>
<string name="sorting_order">Orden de Clasificación</string>
<string name="sort_by_name">Ordenar por nombre</string>
<string name="sort_by_update">Ordenar según la última actualización</string>
<!--Log Fragment-->
<string name="menuSaveLog">Guardar registro</string>
<string name="menuReload">Recargar</string>
<string name="menuClearLog">Limpiar registro ahora</string>
<string name="logs_cleared">Registro limpiado correctamente</string>
<string name="log_is_empty">El registro está vacio</string>
<!--About Activity-->
<string name="app_changelog">Registro de cambios</string>
<string name="translators">dark-basic</string>
<string name="app_translators">Traductores</string>
<!-- System Components, Notifications -->
<string name="update_channel">Actualización de Magisk</string>
<string name="progress_channel">Notificaciones de progreso</string>
<string name="download_complete">Descarga Completa</string>
<string name="download_file_error">Error descargando archivo</string>
<string name="magisk_update_title">Actualización de Magisk disponible!</string>
<string name="manager_update_title">Actualización de Magisk Manager disponible!</string>
<!--Toasts, Dialogs-->
<string name="close">Cerrar</string>
<string name="repo_install_title">Instalar %1$s</string>
<string name="repo_install_msg">¿Quieres instalar %1$s ahora?</string>
<string name="download">Descargar</string>
<string name="reboot">Reiniciar</string>
<string name="settings_reboot_toast">Reinicia para aplicar los ajustes</string>
<string name="release_notes">Notas de lanzamiento</string>
<string name="repo_cache_cleared">Caché del repositorio limpiada</string>
<string name="internal_storage">El zip es almacenado en:\n[Internal Storage]%1$s</string>
<string name="manager_download_install">Pulse para descargar e instalar</string>
<string name="dtbo_patched_title">DTBO fue parchado!</string>
<string name="dtbo_patched_reboot">Magisk Manager ha parcheado dtbo.img, por favor reinicia</string>
<string name="flashing">Flasheando</string>
<string name="hide_manager_title">Ocultando Magisk Manager…</string>
<string name="hide_manager_fail_toast">La Ocultación de Magisk Manager ha fallado…</string>
<string name="open_link_failed_toast">No se encontró ninguna aplicación para abrir el enlace…</string>
<string name="download_zip_only">Descargar sólo el archivo ZIP</string>
<string name="patch_boot_file">Parcheo de la imagen boot</string>
<string name="direct_install">Instalación Directa (Recomendado)</string>
<string name="install_inactive_slot">Instalar en ranura inactiva (después de OTA)</string>
<string name="select_method">Seleccionar Método</string>
<string name="boot_file_patch_msg">Seleccione el volcado de la imagen boot en formato .img o .img.tar</string>
<string name="complete_uninstall">Desinstalación completa</string>
<string name="restore_img">Restaurar imágenes</string>
<string name="restore_done">¡Restauración Terminada!</string>
<string name="restore_img_msg">Restaurando …</string>
<string name="restore_fail">¡El respaldo de la imagen boot Stock no existe!</string>
<string name="proprietary_title">Descargar Código Propietario</string>
<string name="proprietary_notice">Magisk Manager es un Software Libre por lo que no contiene el código API de SafetyNet (Código Propietario de Google).\n\n ¿Puede permitir que Magisk Manager descargue una extensión (contiene el GoogleApiClient) para la comprobación de SafetyNet?</string>
<string name="setup_done">Instalación Realizada</string>
<string name="setup_fail">Instalación Fallida</string>
<string name="env_fix_title">Se Requiere una Instalación Adicional</string>
<string name="env_fix_msg">Su dispositivo requiere una instalación adicional para que Magisk funcione correctamente. Se descargará el zip de instalación de Magisk, desea continuar ahora?</string>
<string name="setup_title">Configuración Adicional</string>
<string name="setup_msg">Ejecutando Configuración de Entorno</string>
<string name="downloading_toast">Descargando %1$s</string>
<string name="no_rw_storage">Esta opción no funcionará sin permiso de escritura en la memoria externa.</string>
<string name="dl_one_module">Descarga un módulo a la vez.</string>
<!--Settings Activity -->
<string name="settings_general_category">General</string>
<string name="settings_dark_theme_title">Tema oscuro</string>
<string name="settings_dark_theme_summary">Habilitar el tema oscuro</string>
<string name="settings_clear_cache_title">Limpiar caché del repositorio</string>
<string name="settings_clear_cache_summary">Limpiar la información en caché para los repositorios en línea, fuerza a la aplicación a actualizar en línea</string>
<string name="settings_hide_manager_title">Ocultar Magisk Manager</string>
<string name="settings_hide_manager_summary">Re-empaquetar Magisk Manager con un nombre de paquete al azar</string>
<string name="settings_restore_manager_title">Restaurar Magisk Manager</string>
<string name="settings_restore_manager_summary">Restaura Magisk Manager con el paquete original</string>
<string name="language">Idioma</string>
<string name="system_default">(Idioma del sistema)</string>
<string name="settings_update">Ajustes de Actualización</string>
<string name="settings_check_update_title">Comprobar Actualizaciones</string>
<string name="settings_check_update_summary">Comprobar periódicamente en segundo plano si existen actualizaciones</string>
<string name="settings_update_channel_title">Canal de Actualización</string>
<string name="settings_update_stable">Estable</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalizado</string>
<string name="settings_update_custom_msg">Insertar una URL personalizada</string>
<string name="settings_boot_format_title">Parchear imagen boot por tipo de formato</string>
<string name="settings_boot_format_summary">Seleccionar el formato de salida para parchear la imagen boot.\nEscoja .img para flashear mediante fastboot/download mode; escoja .img.tar para flashear con ODIN.</string>
<string name="settings_core_only_summary">Habilitar sólo funciones principales, no se cargarán todos los módulos. MagiskSU y MagiskHide seguirán habilitados</string>
<string name="settings_magiskhide_summary">Ocultar Magisk de varias detecciones</string>
<string name="settings_hosts_title">Systemless Hosts</string>
<string name="settings_hosts_summary">Soporte para aplicaciones Adblock fuera de la partición system</string>
<string name="settings_hosts_toast">Módulo systemless hosts agregado</string>
<string name="settings_su_app_adb">Aplicaciones y ADB</string>
<string name="settings_su_app">Sólo aplicaciones</string>
<string name="settings_su_adb">Sólo ADB</string>
<string name="settings_su_disable">Deshabilitado</string>
<string name="settings_su_request_10">10 segundos</string>
<string name="settings_su_request_15">15 segundos</string>
<string name="settings_su_request_20">20 segundos</string>
<string name="settings_su_request_30">30 segundos</string>
<string name="settings_su_request_45">45 segundos</string>
<string name="settings_su_request_60">60 segundos</string>
<string name="superuser_access">Acceso de superusuario</string>
<string name="auto_response">Respuesta automática</string>
<string name="request_timeout">Tiempo de petición</string>
<string name="superuser_notification">Notificación de superusuario</string>
<string name="request_timeout_summary">%1$d segundos</string>
<string name="settings_su_reauth_title">Re-autenticación</string>
<string name="settings_su_reauth_summary">Pedir permisos de superusuario nuevamente si una aplicación es actualizada o reinstalada</string>
<string name="settings_su_fingerprint_title">Autenticación por Huella Dactilar</string>
<string name="settings_su_fingerprint_summary">Utilizar el sensor de Huella Dactilar para permitir las solicitudes de superusuario</string>
<string name="auth_fingerprint">Autenticar Huella Dactilar</string>
<string name="multiuser_mode">Modo MultiUsuario</string>
<string name="settings_owner_only">Sólo Administrador del Dispositivo</string>
<string name="settings_owner_manage">Administrador del Dispositivo</string>
<string name="settings_user_independent">Usuario Independiente</string>
<string name="owner_only_summary">Sólo el administrador tiene acceso root</string>
<string name="owner_manage_summary">Sólo el administrador puede supervisar el acceso root y recibir solicitudes de otros usuarios</string>
<string name="user_indepenent_summary">Cada usuario tiene separadas sus propias reglas de root </string>
<string name="mount_namespace_mode">Montar Namespace </string>
<string name="settings_ns_global">Global Namespace</string>
<string name="settings_ns_requester">Heredar Namespace</string>
<string name="settings_ns_isolate">Aislar Namespace</string>
<string name="global_summary">Todas las sesiones de root utilizan el soporte Global Namespace</string>
<string name="requester_summary">Las sesiones de root heredarán las peticiones Namespace</string>
<string name="isolate_summary">Cada sesión root tendrá su propia Namespace</string>
<string name="android_o_not_support">No es compatible con Android 8.0+</string>
<string name="disable_fingerprint">No se establecieron huellas dactilares o no existe soporte del dispositivo</string>
<!--Superuser-->
<string name="su_request_title">Petición de superusuario</string>
<string name="deny_with_str">Denegar%1$s</string>
<string name="deny">Denegar</string>
<string name="prompt">Preguntar</string>
<string name="grant">Permitir</string>
<string name="su_warning">Permite acceso total a tu dispositivo.\n¡Denegar si no está seguro!</string>
<string name="forever">Siempre</string>
<string name="once">Una vez</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">Permitidos derechos de superusuario para %1$s</string>
<string name="su_deny_toast">Denegados derechos de superusuario para %1$s</string>
<string name="no_apps_found">No se encontraron aplicaciones</string>
<string name="su_snack_grant">Derechos de superusuario para %1$s permitidos</string>
<string name="su_snack_deny">Derechos de superusuario para %1$s denegados</string>
<string name="su_snack_notif_on">Notificaciones de %1$s habilitadas</string>
<string name="su_snack_notif_off">Notificaciones de %1$s deshabilitadas</string>
<string name="su_snack_log_on">Registros de %1$s habilitados</string>
<string name="su_snack_log_off">Registros de %1$s deshabilitados</string>
<string name="su_snack_revoke">Anulados derechos de %1$s</string>
<string name="su_revoke_title">¿Revocar?</string>
<string name="su_revoke_msg">¿Confirmar para revocar derechos de %1$s?</string>
<string name="toast">Aviso</string>
<string name="none">Nada</string>
<string name="auth_fail">Autenticación fallida</string>
<!--Superuser logs-->
<string name="pid">PID: %1$d</string>
<string name="target_uid">UID de objetivo: %1$d</string>
<string name="command">Comando: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Mostrar sistema</string>
</resources>

View File

@@ -1,207 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Moodulid</string>
<string name="downloads">Allalaadimised</string>
<string name="superuser">Superkasutaja</string>
<string name="log">Logi</string>
<string name="settings">Seaded</string>
<string name="install">Installi</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk pole installitud</string>
<string name="checking_for_updates">Kontrollin uuendusi…</string>
<string name="invalid_update_channel">Sobimatu uuenduste kanal</string>
<string name="safetyNet_check_text">Koputa, et alustada SafetyNet\'i kontrolli</string>
<string name="checking_safetyNet_status">Kontrollin SafetyNet\'i olekut…</string>
<string name="safetyNet_check_success">SafetyNet\'i kontroll edukas</string>
<string name="safetyNet_api_error">SafetyNet\'i API viga</string>
<string name="safetyNet_res_invalid">Vastus on sobimatu</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Täpsemad seaded</string>
<string name="keep_force_encryption">Säilita sunnitud krüpteering</string>
<string name="keep_dm_verity">Säilita AVB 2.0/dm-verity</string>
<string name="current_installed">Installitud: %1$s</string>
<string name="latest_version">Viimane: %1$s</string>
<string name="uninstall">Eemalda</string>
<string name="uninstall_magisk_title">Eemalda Magisk</string>
<string name="uninstall_magisk_msg">Kõik moodulid keelatakse/eemaldatakse. Juurkasutaja eemaldatakse ning potensiaalselt krüptitakse su andmed, kui need ei ole hetkel krüpteeritud</string>
<string name="update">Uuenda</string>
<!--Module Fragment-->
<string name="no_info_provided">(Info puudub)</string>
<string name="no_modules_found">Mooduleid ei leitud</string>
<string name="update_file_created">Moodul uuendatakse järgmisel taaskäivitusel</string>
<string name="remove_file_created">Moodul eemaldatakse järgmisel taaskäivitusel</string>
<string name="remove_file_deleted">Moodulit ei eemaldata järgmisel taaskäivitusel</string>
<string name="disable_file_created">Moodul keelatakse järgmisel taaskäivitusel</string>
<string name="disable_file_removed">Moodul lubatakse järgmisel taaskäivitusel</string>
<string name="author">Loodud %1$s poolt</string>
<string name="reboot_recovery">Taaskäivita taastusesse</string>
<string name="reboot_bootloader">Taaskäivita käivitushaldurisse</string>
<string name="reboot_download">Taaskäivita allalaadimisrežiimi</string>
<!--Repo Fragment-->
<string name="update_available">Uuendus saadaval</string>
<string name="installed">Installitud</string>
<string name="not_installed">Pole installitud</string>
<string name="updated_on">Uuendatud: %1$s</string>
<string name="sorting_order">Sorteerimisjärjekord</string>
<string name="sort_by_name">Sorteeri nime järgi</string>
<string name="sort_by_update">Sorteeri viimase uuenduse järgi</string>
<!--Log Fragment-->
<string name="menuSaveLog">Salvesta logi</string>
<string name="menuReload">Laadi uuesti</string>
<string name="menuClearLog">Tühjenda logi nüüd</string>
<string name="logs_cleared">Logi edukalt tühjendatud</string>
<string name="log_is_empty">Logi on tühi</string>
<!--About Activity-->
<string name="app_changelog">Rakenduse muutuste logi</string>
<string name="translators" />
<string name="app_translators">Rakenduse tõlkijad</string>
<!--Toasts, Dialogs-->
<string name="close">Sulge</string>
<string name="repo_install_title">Installi %1$s</string>
<string name="repo_install_msg">Kas soovid kohe installida %1$s?</string>
<string name="download">Allalaadimine</string>
<string name="reboot">Taaskäivita</string>
<string name="magisk_update_title">Magisk\'ile on uuendus saadaval!</string>
<string name="settings_reboot_toast">Taaskäivita seadete rakendamiseks</string>
<string name="release_notes">Väljalaskemärkmed</string>
<string name="repo_cache_cleared">Hoidla vahemälu tühjendatud</string>
<string name="internal_storage">ZIP on salvestatud:\n[Sisemälu]%1$s</string>
<string name="manager_update_title">Magisk Manager\'ile on uuendus saadaval!</string>
<string name="manager_download_install">Vajuta allalaadimiseks ja installimiseks</string>
<string name="dtbo_patched_title">DTBO sai paigatud!</string>
<string name="dtbo_patched_reboot">Magisk Manager on paiganud dtbo.img, palun taaskäivita</string>
<string name="update_channel">Magisk\'i uuendused</string>
<string name="flashing">Välgutamine</string>
<string name="hide_manager_title">Peidan Magisk Manager\'i…</string>
<string name="hide_manager_fail_toast">Magisk Manager\'i peitmine ebaõnnestus…</string>
<string name="download_zip_only">Laadi ainult ZIP alla</string>
<string name="patch_boot_file">Paika käivituspildi fail</string>
<string name="direct_install">Otsene install (soovitatud)</string>
<string name="install_inactive_slot">Installi ebaaktiivsesse lahtrisse (pärast üle-õhu uuendust)</string>
<string name="select_method">Vali meetod</string>
<string name="boot_file_patch_msg">Vali originaalne käivituspildi väljastus .img või .img.tar vormingus</string>
<string name="complete_uninstall">Täielik eemaldus</string>
<string name="restore_img">Taasta pildid</string>
<string name="restore_img_msg">Taastamine…</string>
<string name="restore_done">Taastus valmis!</string>
<string name="restore_fail">Originaalne varundus puudub!</string>
<string name="proprietary_title">Laadi alla suletud koodi</string>
<string name="proprietary_notice">Magisk Manager on vaba ja avatud lähtekoodiga, mis ei sisalda Google\'i suletud SafetyNet\'i API koodi.\n\nKas lubad Magisk Manager\'il SafetyNet\'i kontrollide jaoks laadida alla laiendus (sisaldab GoogleApiClient\'i)?</string>
<string name="setup_done">Seadistus valmis</string>
<string name="setup_fail">Seadistus ebaõnnnestus</string>
<string name="env_fix_title">Vajab lisaseadistust</string>
<string name="env_fix_msg">Sinu seade vajab lisaseadistust, et Magisk töötaks korralikult. Laadime alla Magisk\'i seadistus-zip\'i, kas soovid kohe jätkata?</string>
<string name="setup_title">Lisaseadistus</string>
<string name="setup_msg">Käivitan keskkonnaseadistust…</string>
<string name="download_file_error">Faili allalaadimisel esines viga</string>
<string name="downloading_toast">Laadin %1$s alla</string>
<string name="no_rw_storage">See funktsioon ei tööta ilma välismälule kirjutamise õiguseta.</string>
<!--Settings Activity -->
<string name="settings_general_category">Üldine</string>
<string name="settings_dark_theme_title">Tume teema</string>
<string name="settings_dark_theme_summary">Luba tume teema</string>
<string name="settings_clear_cache_title">Tühjenda hoidla vahemälu</string>
<string name="settings_clear_cache_summary">Tühjenda võrgus olevate hoidlate vahemälus olev teave, sunnib rakendust võrgust värskendama</string>
<string name="settings_hide_manager_title">Peida Magisk Manager</string>
<string name="settings_hide_manager_summary">Taaspaki Magisk Manager juhusliku nimega</string>
<string name="settings_restore_manager_title">Taasta Magisk Manager</string>
<string name="settings_restore_manager_summary">Taasta Magisk Manageri originaalpakett</string>
<string name="language">Keel</string>
<string name="system_default">(Süsteemi vaikesäte)</string>
<string name="settings_update">Uuenduste seaded</string>
<string name="settings_check_update_title">Kontrolli uuendusi</string>
<string name="settings_check_update_summary">Kontrolli taustal perioodiliselt uuendusi</string>
<string name="settings_update_channel_title">Uuenduste kanal</string>
<string name="settings_update_stable">Stabiilne</string>
<string name="settings_update_beta">Beeta</string>
<string name="settings_update_custom">Kohandatud</string>
<string name="settings_update_custom_msg">Sisesta kohandatud URL</string>
<string name="settings_boot_format_title">Paigatud käivitusväljundi vorming</string>
<string name="settings_boot_format_summary">Vali väljutatava paigatud käivituspildi vorming.\nVali .img, mida välgutada fastboot/allalaadimisrežiimi kaudu; vali .img.tar, mida välgutada ODIN\'i kaudu.</string>
<string name="settings_core_only_title">Magisk\'i ainult tuuma režiim</string>
<string name="settings_core_only_summary">Luba ainult põhifunktsioonid. MagiskSU ja MagiskHide siiski lubatakse, ent mooduleid ei laadita.</string>
<string name="settings_magiskhide_summary">Peida Magisk erinevate tuvastuste eest</string>
<string name="settings_hosts_title">Süsteemivaba hosts</string>
<string name="settings_hosts_summary">Süsteemivaba hosts-tugi reklaamiblokeerijatest rakendustele</string>
<string name="settings_su_app_adb">Rakendused ja ADB</string>
<string name="settings_su_app">Ainult rakendused</string>
<string name="settings_su_adb">Ainult ADB</string>
<string name="settings_su_disable">Keelatud</string>
<string name="settings_su_request_10">10 sekundit</string>
<string name="settings_su_request_15">15 sekundit</string>
<string name="settings_su_request_20">20 sekundit</string>
<string name="settings_su_request_30">30 sekundit</string>
<string name="settings_su_request_45">45 sekundit</string>
<string name="settings_su_request_60">60 sekundit</string>
<string name="superuser_access">Superkasutaja ligipääs</string>
<string name="auto_response">Automaatne vastus</string>
<string name="request_timeout">Taotluse ajalõpp</string>
<string name="superuser_notification">Superkasutaja teade</string>
<string name="request_timeout_summary">%1$d sekundit</string>
<string name="settings_su_reauth_title">Taas-autendi peale uuendust</string>
<string name="settings_su_reauth_summary">Taas-autendi superkasutaja õigused peale rakenduse uuendust</string>
<string name="settings_su_fingerprint_title">Luba sõrmejäljega autentimine</string>
<string name="settings_su_fingerprint_summary">Kasuta sõrmejäljelugejat superkasutaja taotluste lubamiseks</string>
<string name="multiuser_mode">Mitmikkasutaja režiim</string>
<string name="settings_owner_only">Ainult seadme omanik</string>
<string name="settings_owner_manage">Seadme omaniku hallatud</string>
<string name="settings_user_independent">Kasutajast sõltumatu</string>
<string name="owner_only_summary">Ainult omanikul on juurkasutaja õigused</string>
<string name="owner_manage_summary">Ainult omanik saab hallata juurkasutaja ligipääsu ja saada taotlusküsimusi</string>
<string name="user_indepenent_summary">Igal kasutajal on oma isiklikud juurkasutaja reeglid</string>
<string name="mount_namespace_mode">Nimeruumi monteerimisrežiim</string>
<string name="settings_ns_global">Globaalne nimeruum</string>
<string name="settings_ns_requester">Võta nimeruum üle</string>
<string name="settings_ns_isolate">Isoleeritud nimeruum</string>
<string name="global_summary">Kõik juurkasutaja sessioonid kasutavad globaalset monteerimise nimeruumi</string>
<string name="requester_summary">Juurkasutaja sessioonid võtavad üle selle taotleja nimeruumi</string>
<string name="isolate_summary">Iga juurkasutaja sessioon saab oma isoleeritud nimeruumi</string>
<string name="android_o_not_support">Pole toetatud Androidi versioonis 8.0+</string>
<string name="disable_fingerprint">Sõrmejälgi pole määratud või seade pole toetatud</string>
<!--Superuser-->
<string name="su_request_title">Superkasutaja taotlus</string>
<string name="deny_with_str">Keela %1$s</string>
<string name="deny">Keela</string>
<string name="prompt">Küsi</string>
<string name="grant">Luba</string>
<string name="su_warning">Annab täieliku ligipääsu sinu seadmele.\nKeela, kui sa pole kindel!</string>
<string name="forever">Igavesti</string>
<string name="once">Üks kord</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">Rakendusele %1$s anti superkasutaja õigused</string>
<string name="su_deny_toast">Rakendusel %1$s keelati superkasutaja õigused</string>
<string name="no_apps_found">Rakendusi ei leitud</string>
<string name="su_snack_grant">Superkasutaja õigused antud rakendusele %1$s</string>
<string name="su_snack_deny">Superkasutaja õigused keelatud rakendusele %1$s</string>
<string name="su_snack_notif_on">Teated lubatud rakendusele %1$s</string>
<string name="su_snack_notif_off">Teated keelatud rakendusele %1$s</string>
<string name="su_snack_log_on">Logimine lubatud rakendusele %1$s</string>
<string name="su_snack_log_off">Logimine keelatud rakendusele %1$s</string>
<string name="su_snack_revoke">Rakenduse %1$s õigused on eemaldatud</string>
<string name="su_revoke_title">Eemaldad?</string>
<string name="su_revoke_msg">Kinnitad rakenduse %1$s õiguste eemaldamise?</string>
<string name="toast">Hüpik</string>
<string name="none">Puudub</string>
<string name="auth_fail">Autentimine ebaõnnestus</string>
<!--Superuser logs-->
<string name="target_uid">Siht-UID: %1$d</string>
<string name="command">Käsklus: %1$s</string>
</resources>

View File

@@ -1,224 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Modules</string>
<string name="downloads">Téléchargements</string>
<string name="superuser">Superutilisateur</string>
<string name="log">Journal</string>
<string name="settings">Paramètres</string>
<string name="install">Installer</string>
<string name="unsupport_magisk_title">Version de Magisk non prise en charge</string>
<string name="unsupport_magisk_message">Cette version de Magisk Manager ne prend pas en charge les versions de Magisk inférieures à 18.0.\n\nVous pouvez soit mettre à jour manuellement Magisk, soit rétrograder la version de Magisk Manager.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk nest pas installé.</string>
<string name="checking_for_updates">Vérification des mises à jour…</string>
<string name="invalid_update_channel">Canal de mise à jour invalide</string>
<string name="safetyNet_check_text">Appuyez pour lancer le contrôle SafetyNet.</string>
<string name="checking_safetyNet_status">Vérification de létat de SafetyNet…</string>
<string name="safetyNet_check_success">Contrôle SafetyNet passé avec succès</string>
<string name="safetyNet_api_error">Erreur de lAPI SafetyNet</string>
<string name="safetyNet_res_invalid">La réponse est incorrecte.</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Paramètres avancés</string>
<string name="keep_force_encryption">Conserver le chiffrement forcé</string>
<string name="keep_dm_verity">Conserver AVB 2.0/dm-verity</string>
<string name="current_installed">Version : %1$s</string>
<string name="latest_version">Dernière : %1$s</string>
<string name="uninstall">Désinstaller</string>
<string name="uninstall_magisk_title">Désinstaller Magisk</string>
<string name="uninstall_magisk_msg">Tous les modules seront désactivés ou supprimés. Les permissions de superutilisateur seront perdues et vos données seront potentiellement chiffrées si elles ne le sont pas déjà.</string>
<string name="update">Mise à jour</string>
<string name="core_only_enabled">(mode « sans modules » activé)</string>
<!--Module Fragment-->
<string name="no_info_provided">(aucune information transmise)</string>
<string name="no_modules_found">Aucun module trouvé.</string>
<string name="update_file_created">Le module sera mis à jour au prochain redémarrage.</string>
<string name="remove_file_created">Le module sera supprimé au prochain redémarrage.</string>
<string name="remove_file_deleted">Le module ne sera pas supprimé au prochain redémarrage.</string>
<string name="disable_file_created">Le module sera désactivé au prochain redémarrage.</string>
<string name="disable_file_removed">Le module sera activé au prochain redémarrage.</string>
<string name="author">Créé par %1$s</string>
<string name="reboot_recovery">Redémarrer en mode récupération</string>
<string name="reboot_bootloader">Redémarrer en mode amorçage</string>
<string name="reboot_download">Redémarrer en mode téléchargement</string>
<!--Repo Fragment-->
<string name="update_available">Mise à jour disponible</string>
<string name="installed">Installé</string>
<string name="not_installed">Non installé</string>
<string name="updated_on">Mis à jour le : %1$s</string>
<string name="sorting_order">Mode de tri</string>
<string name="sort_by_name">par nom</string>
<string name="sort_by_update">par date décroissante</string>
<!--Log Fragment-->
<string name="menuSaveLog">Enregistrer le journal</string>
<string name="menuReload">Actualiser</string>
<string name="menuClearLog">Effacer le journal maintenant</string>
<string name="logs_cleared">Journal effacé avec succès.</string>
<string name="log_is_empty">Journal vide.</string>
<!--About Activity-->
<string name="app_changelog">Journal</string>
<string name="translators">Rom, DevDef</string>
<string name="app_translators">Traducteurs de lapplication</string>
<!-- System Components, Notifications -->
<string name="update_channel">Mises à jour de Magisk</string>
<string name="progress_channel">Progression des notifications</string>
<string name="download_complete">Téléchargement terminé</string>
<string name="download_file_error">Erreur de téléchargement du fichier</string>
<string name="magisk_update_title">Une mise à jour de Magisk est disponible!</string>
<string name="manager_update_title">Une mise à jour de Magisk Manager est disponible!</string>
<!--Toasts, Dialogs-->
<string name="close">Fermer</string>
<string name="repo_install_title">Installer %1$s</string>
<string name="repo_install_msg">Voulezvous installer %1$s maintenant?</string>
<string name="download">Télécharger</string>
<string name="reboot">Redémarrer</string>
<string name="settings_reboot_toast">Redémarrer afin dappliquer les réglages.</string>
<string name="release_notes">Notes de version</string>
<string name="repo_cache_cleared">Cache du dépôt effacé</string>
<string name="internal_storage">Le ZIP est enregistré dans :\n[stockage interne]%1$s</string>
<string name="manager_download_install">Appuyez pour le télécharger et linstaller.</string>
<string name="dtbo_patched_title">DTBO a été modifié!</string>
<string name="dtbo_patched_reboot">Magisk Manager vient de modifier le fichier dtbo.img, veuillez redémarrer.</string>
<string name="flashing">Installation</string>
<string name="hide_manager_title">Masquer Magisk Manager…</string>
<string name="hide_manager_fail_toast">Le masquage de Magisk Manager a échoué.</string>
<string name="open_link_failed_toast">Aucune application permettant douvrir le lien na été trouvée.</string>
<string name="download_zip_only">Télécharger le ZIP seulement</string>
<string name="patch_boot_file">Modifier le fichier damorçage</string>
<string name="direct_install">Installation directe (recommandée)</string>
<string name="install_inactive_slot">Installer dans lespace inactif (après mise à jour OTA)</string>
<string name="warning">Avertissement</string>
<string name="install_inactive_slot_msg">Votre appareil sera réamorcé à partir de lespace actuellement inactif après un redémarrage!\nNutilisez cette option quuniquement après que la mise à jour OTA a été effectuée.\nVoulezvous continuer?</string>
<string name="select_method">Sélectionnez la méthode</string>
<string name="boot_file_patch_msg">Sélectionnez limage damorçage par défaut stockée au format .img ou .img.tar.</string>
<string name="complete_uninstall">Désinstallation terminée</string>
<string name="restore_img">Restauration des images</string>
<string name="restore_img_msg">Restauration…</string>
<string name="restore_done">Restauration terminée!</string>
<string name="restore_fail">La sauvegarde par défaut nexiste pas!</string>
<string name="proprietary_title">Téléchargement de code propriétaire</string>
<string name="proprietary_notice">Magisk Manager est un logiciel libre et ne contient pas le code propriétaire de lAPI SafetyNet de Google.\n\nVoulezvous autoriser Magisk Manager à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet?</string>
<string name="setup_done">Installation terminée</string>
<string name="setup_fail">Échec de linstallation</string>
<string name="env_fix_title">Installation additionnelle requise</string>
<string name="env_fix_msg">Votre appareil a besoin dune configuration supplémentaire pour que Magisk fonctionne correctement. Pour cela, il est nécessaire de télécharger un fichier ZIP dinstallation de Magisk. Voulezvous le faire maintenant?</string>
<string name="setup_title">Installation additionnelle</string>
<string name="setup_msg">Démarrer linstallation de lenvironnement…</string>
<string name="downloading_toast">Téléchargement de %1$s</string>
<string name="no_rw_storage">Cette opération ne fonctionnera pas sans la permission décriture sur le stockage externe.</string>
<string name="dl_one_module">Un seul module peut être téléchargé à la fois.</string>
<!--Settings Activity -->
<string name="settings_general_category">Général</string>
<string name="settings_dark_theme_title">Thème sombre</string>
<string name="settings_dark_theme_summary">Activer le thème sombre.</string>
<string name="settings_clear_cache_title">Effacer le cache du dépôt</string>
<string name="settings_clear_cache_summary">Effacer les informations de cache pour les dépôts en ligne. Cela force lapplication à récupérer ses informations en ligne.</string>
<string name="settings_hide_manager_title">Masquer Magisk Manager</string>
<string name="settings_hide_manager_summary">Réempaqueter Magisk Manager avec un nom de paquet aléatoire.</string>
<string name="settings_restore_manager_title">Restaurer Magisk Manager</string>
<string name="settings_restore_manager_summary">Restaurer Magisk Manager avec son nom de paquet dorigine</string>
<string name="language">Langue</string>
<string name="system_default">(système par défaut)</string>
<string name="settings_update">Mise à jour des réglages</string>
<string name="settings_check_update_title">Vérification des mises à jour</string>
<string name="settings_check_update_summary">Vérifier périodiquement en tâche de fond lexistence dune mise à jour.</string>
<string name="settings_update_channel_title">Canal de mise à jour</string>
<string name="settings_update_stable">Stable</string>
<string name="settings_update_beta">Bêta</string>
<string name="settings_update_custom">Personnalisé</string>
<string name="settings_update_custom_msg">Insérez une URL personnalisée</string>
<string name="settings_boot_format_title">Format de sortie du fichier damorçage modifié</string>
<string name="settings_boot_format_summary">Sélectionnez le format de sortie de limage damorçage modifiée.\nChoisissez .img pour flasher via le mode démarrage rapide/téléchargement, ou .img.tar pour flasher via ODIN.</string>
<string name="settings_core_only_title">Mode Magisk Core uniquement</string>
<string name="settings_core_only_summary">Active uniquement les fonctionnalités de base. MagiskSU et MagiskHide resteront activés, mais aucun module ne sera chargé. </string>
<string name="settings_magiskhide_summary">Rendre Magisk invisible à diverses formes de détection.</string>
<string name="settings_hosts_title">Fichier hosts sans système</string>
<string name="settings_hosts_summary">Prise en charge du fichier hosts sans système pour les applications de type AdBlock.</string>
<string name="settings_hosts_toast">Ajout dun module hosts sans système</string>
<string name="settings_su_app_adb">Applications et ADB</string>
<string name="settings_su_app">Applications uniquement</string>
<string name="settings_su_adb">ADB uniquement</string>
<string name="settings_su_disable">Désactivé</string>
<string name="settings_su_request_10">10 secondes</string>
<string name="settings_su_request_15">15 secondes</string>
<string name="settings_su_request_20">20 secondes</string>
<string name="settings_su_request_30">30 secondes</string>
<string name="settings_su_request_45">45 secondes</string>
<string name="settings_su_request_60">60 secondes</string>
<string name="superuser_access">Accès superutilisateur</string>
<string name="auto_response">Réponse automatique</string>
<string name="request_timeout">Délai dexpiration de la demande</string>
<string name="superuser_notification">Notification superutilisateur</string>
<string name="request_timeout_summary">%1$d secondes</string>
<string name="settings_su_reauth_title">Authentifier à nouveau après la mise à niveau</string>
<string name="settings_su_reauth_summary">Authentifier à nouveau les autorisations superutilisateur après une mise à jour de lapplication</string>
<string name="settings_su_fingerprint_title">Activer lauthentification par empreinte digitale</string>
<string name="settings_su_fingerprint_summary">Utiliser le lecteur dempreintes digitales pour autoriser les demandes superutilisateur</string>
<string name="auth_fingerprint">Authentifier lempreinte digitale</string>
<string name="multiuser_mode">Mode multiutilisateur</string>
<string name="settings_owner_only">Propriétaire de lappareil uniquement</string>
<string name="settings_owner_manage">Géré par le propriétaire de lappareil</string>
<string name="settings_user_independent">Indépendant de lutilisateur</string>
<string name="owner_only_summary">Seul le propriétaire a un accès superutilisateur.</string>
<string name="owner_manage_summary">Seul le propriétaire peut gérer laccès superutilisateur et recevoir les demandes de requêtes.</string>
<string name="user_indepenent_summary">Chaque utilisateur a ses propres règles superutilisateur séparées.</string>
<string name="mount_namespace_mode">Mode despace de noms du montage</string>
<string name="settings_ns_global">Espace de noms global</string>
<string name="settings_ns_requester">Hériter de lespace de noms</string>
<string name="settings_ns_isolate">Espace de noms isolé</string>
<string name="global_summary">Toutes les sessions superutilisateur utilisent lespace de noms global du montage.</string>
<string name="requester_summary">Les sessions superutilisateur hériteront de lespace de noms de leur demandeur.</string>
<string name="isolate_summary">Chaque session superutilisateur aura son propre espace de noms isolé.</string>
<string name="android_o_not_support">Android 8.0 et supérieurs ne sont pas pris en charge.</string>
<string name="disable_fingerprint">Aucune empreinte digitale na été définie ou le lecteur dempreinte nest pas pris en charge.</string>
<!--Superuser-->
<string name="su_request_title">Requête superutilisateur</string>
<string name="deny_with_str">Refuser %1$s</string>
<string name="deny">Refuser</string>
<string name="prompt">Demander</string>
<string name="grant">Accepter</string>
<string name="su_warning">Autoriser laccès complet à votre appareil.\nRefusez si vous nêtes pas sûr!</string>
<string name="forever">toujours</string>
<string name="once">une fois</string>
<string name="tenmin">10min</string>
<string name="twentymin">20min</string>
<string name="thirtymin">30min</string>
<string name="sixtymin">60min</string>
<string name="su_allow_toast">%1$s a obtenu les droits superutilisateur</string>
<string name="su_deny_toast">%1$s na pas obtenu les droits superutilisateur</string>
<string name="no_apps_found">Aucune application trouvée</string>
<string name="su_snack_grant">Les droits superutilisateur de %1$s sont accordés</string>
<string name="su_snack_deny">Les droits superutilisateur de %1$s sont refusés</string>
<string name="su_snack_notif_on">Les notifications pour %1$s sont activées</string>
<string name="su_snack_notif_off">Les notifications pour %1$s sont désactivées</string>
<string name="su_snack_log_on">La journalisation pour %1$s est activée</string>
<string name="su_snack_log_off">La journalisation pour %1$s est désactivée</string>
<string name="su_snack_revoke">Les droits de %1$s sont annulés</string>
<string name="su_revoke_title">Annuler ?</string>
<string name="su_revoke_msg">Confirmezvous lannulation des droits pour %1$s?</string>
<string name="toast">Toast</string>
<string name="none">Aucun</string>
<string name="auth_fail">Échec de lauthentification</string>
<!--Superuser logs-->
<string name="pid">PID : %1$d</string>
<string name="target_uid">UID cible : %1$d</string>
<string name="command">Commande : %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Afficher les applications système</string>
</resources>

View File

@@ -1,180 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Moduli</string>
<string name="downloads">Preuzimanja</string>
<string name="superuser">Superuser</string>
<string name="log">Zapisnik događaja</string>
<string name="settings">Postavke</string>
<string name="install">Instaliranje</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk nije instaliran</string>
<string name="checking_for_updates">Provjera ažuriranja…</string>
<string name="safetyNet_check_text">Dodirni za SafetyNet provjeru</string>
<string name="checking_safetyNet_status">Provjera SafetyNet statusa</string>
<string name="safetyNet_check_success">SafetyNet provjera uspješna</string>
<string name="safetyNet_api_error">SafetyNet API greška</string>
<string name="safetyNet_res_invalid">Odgovor je nevažeći</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Napredne postavke</string>
<string name="keep_force_encryption">Zadrži prisilno šifirannje</string>
<string name="keep_dm_verity">Zadrži AVB 2.0/dm-verity</string>
<string name="current_installed">Instalirana: %1$s</string>
<string name="latest_version">Najnovija: %1$s</string>
<string name="uninstall">Deinstaliraj</string>
<string name="uninstall_magisk_title">Deinstaliraj Magisk</string>
<string name="uninstall_magisk_msg">Svi moduli će biti onemogućeni/uklonjeni. Root će biti uklonjen i potencijalno šifrirati Vaše podatke, ukoliko Vaši podaci trenutačno nisu šifrirani</string>
<string name="update">Ažuriraj</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nema podataka)</string>
<string name="no_modules_found">Nijedan modul nije pronađen</string>
<string name="update_file_created">Modul će se ažurirati pri sljedećem ponovnom pokretanju</string>
<string name="remove_file_created">Modul će biti uklonjen pri sljedećem ponovnom pokretanju</string>
<string name="remove_file_deleted">Modul neće biti uklonjen pri sljedećem ponovnom pokretanju</string>
<string name="disable_file_created">Modul će biti onemogućen pri sljedećem ponovnom pokretanju</string>
<string name="disable_file_removed">Modul će biti omogućen pri sljedećem ponovnom pokretanju</string>
<string name="author">Napravio %1$s</string>
<!--Repo Fragment-->
<string name="update_available">Ažuriranje dostupno</string>
<string name="installed">Instalirano</string>
<string name="not_installed">Nije instalirano</string>
<!--Log Fragment-->
<string name="menuSaveLog">"Spremi zapisnik "</string>
<string name="menuReload">Ponovno učitaj</string>
<string name="menuClearLog">Očisti zapisnik sada</string>
<string name="logs_cleared">Zapisnik je uspješno izbrisan</string>
<string name="log_is_empty">Zapisnik je prazan</string>
<!--About Activity-->
<string name="app_changelog">Popis izmjena aplikacije</string>
<string name="translators" />
<string name="app_translators">Prevoditelji aplikacije</string>
<!--Toasts, Dialogs-->
<string name="close">Zatvori</string>
<string name="repo_install_title">Instaliraj %1$s</string>
<string name="repo_install_msg">Da li želite instalirati %1$s sada?</string>
<string name="download">Preuzmi</string>
<string name="reboot">Ponovno podizanje sustava</string>
<string name="magisk_update_title">Dostupno je novo Magisk ažuriranje!</string>
<string name="settings_reboot_toast">Ponovno pokrenite kako biste primjenili postavke</string>
<string name="release_notes">Bilješke o izdavanju aplikacije</string>
<string name="repo_cache_cleared">Predmemorija repozitorija izbrisana</string>
<string name="internal_storage">Zip je pohranjen u:\n[Unutarnja pohrana]%1$s</string>
<string name="manager_update_title">Dostupno je novo ažuriranje Magisk Manager aplikacije!</string>
<string name="manager_download_install">Pritisnite za preuzimanje i instalaciju</string>
<string name="update_channel">Magisk ažuriranja</string>
<string name="flashing">Apliciranje</string>
<string name="hide_manager_title">Skrivanje Magisk Manager aplikacije…</string>
<string name="hide_manager_fail_toast">Skrivanje Magisk Manager nije uspjelo</string>
<string name="download_zip_only">Preuzmi samo zip</string>
<string name="patch_boot_file">Zakrpa datoteke za podizanje sustava</string>
<string name="direct_install">Izravna instalacija (preporuča se)</string>
<string name="select_method">Odaberite metodu</string>
<string name="boot_file_patch_msg">Odaberite standardnu datoteku za podizanje sustava u .img ili .img.tar formatu</string>
<string name="complete_uninstall">Potpuna deinstalacija</string>
<string name="restore_done">Obnova je dovršena!</string>
<string name="restore_fail">Stock backup does not exist!</string>
<string name="proprietary_title">Preuzmite vlasnički kod</string>
<string name="proprietary_notice">Magisk Manager je FOSS aplikacija te ne sadrži Googleov SafetyNet API kod.\n\nDopuštate li Magisk Manager aplikaciji da preuzme proširenje (sadrži GoogleApiClient) za SafetyNet provjere?</string>
<string name="download_file_error">Pogreška prilikom preuzimanja datoteke</string>
<string name="downloading_toast">Preuzimanje %1$s</string>
<string name="no_rw_storage">Ova značajka neće raditi bez dopuštenja za korištenje vanjske pohrane.</string>
<!--Settings Activity -->
<string name="settings_general_category">Općenito</string>
<string name="settings_dark_theme_title">Tamna tema</string>
<string name="settings_dark_theme_summary">Omogući tamnu temu</string>
<string name="settings_clear_cache_title">Izbriši predmemoriju repozitorija</string>
<string name="settings_clear_cache_summary">Izbrišite predmemorirane informacije za online repozitorij, prisiljavajući aplikaciju da se osvježi online</string>
<string name="settings_hide_manager_title">Sakrij Magisk Manager</string>
<string name="settings_hide_manager_summary">Privremeno sakrij Magisk Manager.\nTo će instalirati novu aplikaciju pod nazivom \"Otkrij Magisk Manager\"</string>
<string name="language">Jezik</string>
<string name="system_default">(Zadana postavka sustava)</string>
<string name="settings_update">Ažuriraj postavke</string>
<string name="settings_update_channel_title">Kanal ažuriranja</string>
<string name="settings_update_stable">Stabilno</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_boot_format_title">Izlazni format datoteke za podizanje sustava nakon zakrpe</string>
<string name="settings_boot_format_summary">Odaberite izlazni format datoteke za podizanje sustava nakon zakrpe.\nOdaberite .img da biste aplicirali putem brzog pokretanja(fastboota)/preuzimanja(downloada); odaberite .img.tar da biste aplicirali putem ODIN-a.</string>
<string name="settings_core_only_title">Samo Magisk Core način rada</string>
<string name="settings_core_only_summary">Omogućite samo osnovne značajke, svi se moduli neće učitati. MagiskSU i MagiskHide će i dalje biti omogućeni</string>
<string name="settings_magiskhide_summary">Sakrij Magisk od raznih detekcija</string>
<string name="settings_hosts_title">Systemless hostovi</string>
<string name="settings_hosts_summary">Systemless hostovi podržavaju Adblock aplikacije</string>
<string name="settings_su_app_adb">Aplikacije i ADB</string>
<string name="settings_su_app">Samo aplikacije</string>
<string name="settings_su_adb">Samo ADB</string>
<string name="settings_su_disable">Onemogućeno</string>
<string name="settings_su_request_10">10 sekundi</string>
<string name="settings_su_request_15">15 sekundi</string>
<string name="settings_su_request_20">20 sekundi</string>
<string name="settings_su_request_30">30 sekundi</string>
<string name="settings_su_request_45">45 sekundi</string>
<string name="settings_su_request_60">60 sekundi</string>
<string name="superuser_access">Superuser pristup</string>
<string name="auto_response">Automatski odgovor</string>
<string name="request_timeout">Vremensko ograničenje zahtjeva</string>
<string name="superuser_notification">Superuser obavijest</string>
<string name="request_timeout_summary">%1$d sekundi</string>
<string name="settings_su_reauth_title">Ponovno provjerite autentičnost nakon ažuriranja</string>
<string name="settings_su_reauth_summary">Ponovno provjerite autentičnost Superuser dopuštenja nakon ažuriranja aplikacije</string>
<string name="multiuser_mode">Višekorisnički način rada</string>
<string name="settings_owner_only">Samo vlasnik uređaja</string>
<string name="settings_owner_manage">Upravljano od strane vlasnika uređaja</string>
<string name="settings_user_independent">Neovisno o korisniku</string>
<string name="owner_only_summary">Samo vlasnik ima root pristup</string>
<string name="owner_manage_summary">Samo vlasnik može upravljati root pristupom i primati zahtjeve za root pristup</string>
<string name="user_indepenent_summary">Svaki korisnik ima vlastita root pravila</string>
<string name="mount_namespace_mode">Postavljanje imenskog prostora</string>
<string name="settings_ns_global">Globalni imenski prostor</string>
<string name="settings_ns_requester">Naslijediti imenski prostor</string>
<string name="settings_ns_isolate">Izolirani imenski prostor</string>
<string name="global_summary">Sve root sesije koriste globalni imenski prostor</string>
<string name="requester_summary">Root sesije će naslijediti imenski prostor tražitelja</string>
<string name="isolate_summary">Svaka root sesija ima svoj vlastiti imenski prostor</string>
<!--Superuser-->
<string name="su_request_title">Superuser zahtjev</string>
<string name="deny_with_str">Odbij%1$s</string>
<string name="deny">Odbij</string>
<string name="prompt">Upitaj</string>
<string name="grant">Odobri</string>
<string name="su_warning">Omogućuje potpuni pristup Vašem uređaju.\nOdbijte ako niste sigurni!</string>
<string name="forever">Zauvijek</string>
<string name="once">Jednom</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s su dodijeljena Superuser prava</string>
<string name="su_deny_toast">%1$s su odbijena Superuser prava</string>
<string name="no_apps_found">Nisu pronađene aplikacije</string>
<string name="su_snack_grant">Superuser prava su dodijeljena za %1$s</string>
<string name="su_snack_deny">Superuser prava su odbijena za %1$s</string>
<string name="su_snack_notif_on">Obavijesti za %1$s su odobrene</string>
<string name="su_snack_notif_off">Obavijesti za %1$s su odbijene</string>
<string name="su_snack_log_on">Zapisnik događaja omogućen je za %1$s</string>
<string name="su_snack_log_off">Zapisnik događaja onemogućen je za %1$s</string>
<string name="su_snack_revoke">Opozvana su prava za %1$s</string>
<string name="su_revoke_title">Opozvati?</string>
<string name="su_revoke_msg">Potvrdite da biste opozvali prava za %1$s?</string>
<string name="toast">Pop-up</string>
<string name="none">Nijedan</string>
<!--Superuser logs-->
<string name="target_uid">Ciljani UID: %1$d</string>
<string name="command">Naredba: %1$s</string>
</resources>

View File

@@ -1,222 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Modul</string>
<string name="downloads">Unduhan</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Pengaturan</string>
<string name="install">Pasang</string>
<string name="unsupport_magisk_title">Versi Magisk Tidak Didukung</string>
<string name="unsupport_magisk_message">Magisk Manager versi ini tidak mendukung versi Magisk di bawah v18.0.\n\nAnda dapat memperbarui Magisk secara manual, atau menurunkan aplikasi ke versi sebelumnya.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk tidak terpasang.</string>
<string name="checking_for_updates">Memeriksa pembaruan…</string>
<string name="invalid_update_channel">Kanal Pembaruan tidak valid!</string>
<string name="safetyNet_check_text">Ketuk untuk memulai pemeriksaan SafetyNet</string>
<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="magisk_up_to_date">Magisk sudah di versi terbaru</string>
<string name="manager_up_to_date">Magisk Manager sudah di versi terbaru</string>
<string name="advanced_settings_title">Pengaturan 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="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="update">Perbarui</string>
<string name="core_only_enabled">(Mode inti saja aktif)</string>
<!--Module Fragment-->
<string name="no_info_provided">(Tidak ada info tersedia)</string>
<string name="no_modules_found">Tidak ada modul ditemukan.</string>
<string name="update_file_created">Modul akan diperbarui pada reboot berikutnya.</string>
<string name="remove_file_created">Modul akan dihapus pada reboot berikutnya.</string>
<string name="remove_file_deleted">Modul tidak akan dihapus pada reboot berikutnya.</string>
<string name="disable_file_created">Modul akan dinonaktifkan pada reboot berikutnya.</string>
<string name="disable_file_removed">Modul akan diaktifkan pada reboot berikutnya.</string>
<string name="author">Dibuat oleh %1$s</string>
<string name="reboot_recovery">Reboot ke Recovery</string>
<string name="reboot_bootloader">Reboot ke Bootloader</string>
<string name="reboot_download">Reboot ke Download</string>
<!--Repo Fragment-->
<string name="update_available">Pembaruan Tersedia</string>
<string name="installed">Terpasang</string>
<string name="not_installed">Tidak Terpasang</string>
<string name="updated_on">Diperbarui pada: %1$s</string>
<string name="sorting_order">Urutkan Susunan</string>
<string name="sort_by_name">Urut berdasarkan nama</string>
<string name="sort_by_update">Urut berdasarkan pembaruan terakhir</string>
<!--Log Fragment-->
<string name="menuSaveLog">Simpan log</string>
<string name="menuReload">Muat ulang</string>
<string name="menuClearLog">Bersihkan log sekarang</string>
<string name="logs_cleared">Log berhasil dibersihkan.</string>
<string name="log_is_empty">Log kosong.</string>
<!--About Activity-->
<string name="app_changelog">Log pembaruan</string>
<string name="translators">Albert I (krasCGQ)</string>
<string name="app_translators">Penerjemah</string>
<!-- System Components, Notifications -->
<string name="update_channel">Pembaruan Magisk</string>
<string name="progress_channel">Notifikasi Kemajuan</string>
<string name="download_complete">Unduhan selesai</string>
<string name="download_file_error">Kesalahan mengunduh file</string>
<string name="magisk_update_title">Pembaruan Magisk Tersedia!</string>
<string name="manager_update_title">Pembaruan Magisk Manager Tersedia!</string>
<!--Toasts, Dialogs-->
<string name="close">Tutup</string>
<string name="repo_install_title">Pasang %1$s</string>
<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 pengaturan.</string>
<string name="release_notes">Catatan rilis</string>
<string name="repo_cache_cleared">Cache repo dibersihkan</string>
<string name="internal_storage">Zip disimpan di:\n[Penyimpanan Internal]%1$s</string>
<string name="manager_download_install">Tekan untuk unduh dan pasang.</string>
<string name="dtbo_patched_title">DTBO telah ditambal!</string>
<string name="dtbo_patched_reboot">Magisk Manager telah menambal dtbo.img. Silahkan reboot.</string>
<string name="flashing">Flashing</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="download_zip_only">Unduh Zip Saja</string>
<string name="patch_boot_file">Tambal File Boot Image</string>
<string name="direct_install">Pasang Langsung (Direkomendasikan)</string>
<string name="install_inactive_slot">Pasang ke Slot Nonaktif (Setelah OTA)</string>
<string name="warning">Peringatan</string>
<string name="install_inactive_slot_msg">Perangkat Anda akan DIPAKSA untuk boot ke slot nonaktif saat ini setelah sebuah reboot!\nHanya gunakan opsi ini setelah OTA selesai.\nLanjutkan?</string>
<string name="select_method">Pilih Metode</string>
<string name="boot_file_patch_msg">Pilih stock boot image dump dalam format .img atau .img.tar.</string>
<string name="complete_uninstall">Copot Total</string>
<string name="restore_img">Pulihkan Image</string>
<string name="restore_img_msg">Memulihkan…</string>
<string name="restore_done">Pemulihan selesai!</string>
<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_done">Penyiapan selesai.</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_title">Penyiapan Tambahan</string>
<string name="setup_msg">Menjalankan penyiapan lingkungan…</string>
<string name="downloading_toast">Mengunduh %1$s</string>
<string name="no_rw_storage">Fitur ini tidak akan bekerja tanpa izin untuk menulis ke penyimpanan eksternal.</string>
<string name="dl_one_module">Unduh satu modul pada suatu waktu.</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_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_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_restore_manager_title">Pulihkan Magisk Manager</string>
<string name="settings_restore_manager_summary">Pulihkan Magisk Manager dengan paket asli</string>
<string name="language">Bahasa</string>
<string name="system_default">(Default Sistem)</string>
<string name="settings_update">Pengaturan 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_update_channel_title">Kanal Pembaruan</string>
<string name="settings_update_stable">Stabil</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Kustom</string>
<string name="settings_update_custom_msg">Masukkan sebuah URL kustom</string>
<string name="settings_boot_format_title">Format Keluaran Boot yang Ditambal</string>
<string name="settings_boot_format_summary">Pilih format untuk keluaran boot image yang ditambal.\nPilih .img untuk flash melalui mode recovery/download; pilih .img.tar untuk flash melalui ODIN.</string>
<string name="settings_core_only_title">Magisk Mode Inti Saja</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_hosts_title">Host tanpa sistem</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_su_app_adb">Apl dan ADB</string>
<string name="settings_su_app">Apl saja</string>
<string name="settings_su_adb">ADB saja</string>
<string name="settings_su_disable">Nonaktif</string>
<string name="settings_su_request_10">10 detik</string>
<string name="settings_su_request_15">15 detik</string>
<string name="settings_su_request_20">20 detik</string>
<string name="settings_su_request_30">30 detik</string>
<string name="settings_su_request_45">45 detik</string>
<string name="settings_su_request_60">60 detik</string>
<string name="superuser_access">Akses Superuser</string>
<string name="auto_response">Tanggapan Otomatis</string>
<string name="request_timeout">Batas Waktu Permintaan</string>
<string name="superuser_notification">Notifikasi Superuser</string>
<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_fingerprint_title">Aktifkan Otentikasi Sidik Jari</string>
<string name="settings_su_fingerprint_summary">Gunakan pemindai sidik jari untuk mengizinkan permintaan superuser</string>
<string name="auth_fingerprint">Otentikasi Sidik Jari</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="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="android_o_not_support">Tidak mendukung Android 8.0+.</string>
<string name="disable_fingerprint">Tidak ada sidik jari diatur atau tidak ada dukungan perangkat.</string>
<!--Superuser-->
<string name="su_request_title">Permintaan Superuser</string>
<string name="deny_with_str">Tolak%1$s</string>
<string name="deny">Tolak</string>
<string name="prompt">Beritahu</string>
<string name="grant">Izinkan</string>
<string name="su_warning">Mengizinkan akses penuh ke perangkat Anda.\nTolak jika Anda tidak yakin!</string>
<string name="forever">Selamanya</string>
<string name="once">Sekali</string>
<string name="tenmin">10 mnt</string>
<string name="twentymin">20 mnt</string>
<string name="thirtymin">30 mnt</string>
<string name="sixtymin">60 mnt</string>
<string name="su_allow_toast">%1$s diizinkan akses Superuser</string>
<string name="su_deny_toast">%1$s ditolak akses Superuser</string>
<string name="no_apps_found">Tidak ada apl ditemukan</string>
<string name="su_snack_grant">Akses Superuser dari %1$s diizinkan</string>
<string name="su_snack_deny">Akses Superuser dari %1$s ditolak</string>
<string name="su_snack_notif_on">Notifikasi dari %1$s diaktifkan</string>
<string name="su_snack_notif_off">Notifikasi dari %1$s dinonaktifkan</string>
<string name="su_snack_log_on">Logging dari %1$s diaktifkan</string>
<string name="su_snack_log_off">Logging dari %1$s dinonaktifkan</string>
<string name="su_snack_revoke">Akses %1$s dicabut</string>
<string name="su_revoke_title">Cabut?</string>
<string name="su_revoke_msg">Konfirmasi untuk mencabut akses %1$s?</string>
<string name="toast">Toast</string>
<string name="none">Tidak ada</string>
<string name="auth_fail">Otentikasi Gagal</string>
<!--Superuser logs-->
<string name="pid">PID: %1$d</string>
<string name="target_uid">UID target: %1$d</string>
<string name="command">Perintah: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Tampilkan apl sistem</string>
</resources>

View File

@@ -1,221 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Moduli</string>
<string name="downloads">Download</string>
<string name="superuser">Superuser</string>
<string name="log">Registro eventi</string>
<string name="settings">Impostazioni</string>
<string name="install">Installa</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk non è installato.</string>
<string name="checking_for_updates">Controllo aggiornamenti…</string>
<string name="invalid_update_channel">Canale di aggiornamento non valido</string>
<string name="safetyNet_check_text">Tocca per controllare SafetyNet</string>
<string name="checking_safetyNet_status">Controllo stato SafetyNet…</string>
<string name="safetyNet_check_success">Controllo SafetyNet OK</string>
<string name="safetyNet_api_error">Errore API SafetyNet</string>
<string name="safetyNet_res_invalid">La risposta non è valida.</string>
<string name="magisk_up_to_date">Magisk è aggiornato</string>
<string name="manager_up_to_date">Magisk Manager è aggiornato</string>
<string name="advanced_settings_title">Impostazioni avanzate</string>
<string name="keep_force_encryption">Mantieni crittografia forzata</string>
<string name="keep_dm_verity">Mantieni AVB 2.0/dm-verity</string>
<string name="current_installed">Installata: %1$s</string>
<string name="latest_version">Ultima: %1$s</string>
<string name="uninstall">Disinstalla</string>
<string name="uninstall_magisk_title">Disinstalla Magisk</string>
<string name="uninstall_magisk_msg">Tutti i moduli verranno disabilitati/rimossi. Il root verrà rimosso e i tuoi dati potrebbero venire criptati, nel caso non lo siano già.</string>
<string name="update">Aggiorna</string>
<string name="core_only_enabled">(Modalità solo Core abilitata)</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nessuna informazione)</string>
<string name="no_modules_found">Nessun modulo trovato.</string>
<string name="update_file_created">Il modulo sarà aggiornato al prossimo riavvio.</string>
<string name="remove_file_created">Il modulo sarà rimosso al prossimo riavvio.</string>
<string name="remove_file_deleted">Il modulo non sarà rimosso al prossimo riavvio.</string>
<string name="disable_file_created">Il modulo sarà disabilitato al prossimo riavvio.</string>
<string name="disable_file_removed">Il modulo sarà abilitato al prossimo riavvio.</string>
<string name="author">Creato da: %1$s</string>
<string name="reboot_recovery">Riavvia in Recovery</string>
<string name="reboot_bootloader">Riavvia in Bootloader</string>
<string name="reboot_download">Riavvia in Download Mode</string>
<!--Repo Fragment-->
<string name="update_available">Aggiornamento disponibile</string>
<string name="installed">Installato</string>
<string name="not_installed">Non installato</string>
<string name="updated_on">Aggiornato il: %1$s</string>
<string name="sorting_order">Ordinamento</string>
<string name="sort_by_name">Ordina per nome</string>
<string name="sort_by_update">Ordina per ultimo aggiornamento</string>
<!--Log Fragment-->
<string name="menuSaveLog">Salva registro eventi</string>
<string name="menuReload">Ricarica</string>
<string name="menuClearLog">Svuota il registro eventi</string>
<string name="logs_cleared">Registro eventi svuotato correttamente.</string>
<string name="log_is_empty">Il registro eventi è vuoto.</string>
<!--About Activity-->
<string name="app_changelog">Novità</string>
<string name="translators">Auanasgheps</string>
<string name="app_translators">Traduttori</string>
<!-- System Components, Notifications -->
<string name="update_channel">Aggiornamenti Magisk</string>
<string name="progress_channel">Notifiche di avanzamento</string>
<string name="download_complete">Download completato</string>
<string name="download_file_error">Errore durante il download del file</string>
<string name="magisk_update_title">È disponibile un nuovo aggiornamento di Magisk!</string>
<string name="manager_update_title">È disponibile un nuovo aggiornamento di Magisk Manager!</string>
<!--Toasts, Dialogs-->
<string name="close">Chiudi</string>
<string name="repo_install_title">Installazione di %1$s</string>
<string name="repo_install_msg">Vuoi installare %1$s?</string>
<string name="download">Download</string>
<string name="reboot">Riavvia</string>
<string name="settings_reboot_toast">Riavvia per applicare i cambiamenti.</string>
<string name="release_notes">Note di rilascio</string>
<string name="repo_cache_cleared">La cache delle repository è stata svuotata</string>
<string name="internal_storage">Il file zip si trova in:\n[Memoria Interna]%1$s</string>
<string name="manager_download_install">Premere per scaricare e installare.</string>
<string name="dtbo_patched_title">DTBO è stato aggiornato!</string>
<string name="dtbo_patched_reboot">Magisk Manager ha aggiornato dtbo.img. Riavvia per completare.</string>
<string name="flashing">Flash in corso…</string>
<string name="hide_manager_title">Nascondendo Magisk Manager…</string>
<string name="hide_manager_fail_toast">Non è stato possibile nascondere Magisk Manager.</string>
<string name="open_link_failed_toast">Nessuna app disponibile per aprire il link.</string>
<string name="download_zip_only">Scarica solo il file zip</string>
<string name="patch_boot_file">Aggiorna l\'immagine di boot</string>
<string name="direct_install">Installazione diretta (raccomandata)</string>
<string name="install_inactive_slot">Installa nello slot inattivo (dopo un OTA)</string>
<string name="warning">Attenzione</string>
<string name="install_inactive_slot_msg">Questo dispositivo verrà FORZATO ad avviarsi usando lo slot inattivo!\nUsa questo metodo solo dopo che un OTA è stato installato.\nVuoi continuare?</string>
<string name="select_method">Seleziona un metodo</string>
<string name="boot_file_patch_msg">Seleziona l\'immagine originale di boot in formato .img o img.tar.</string>
<string name="complete_uninstall">Disinstallazione completa</string>
<string name="restore_img">Ripristina Immagini</string>
<string name="restore_img_msg">Ripristino…</string>
<string name="restore_done">Ripristino completato!</string>
<string name="restore_fail">Non esiste un\'immagine originale di boot!</string>
<string name="proprietary_title">Scarica codice proprietario</string>
<string name="proprietary_notice">Magisk Manager è FOSS e non contiene codice proprietario delle API Google SafetyNet.\n\nVuoi scaricare un\'estensione (contenente GoogleApiClient) per controllare lo stato di SafetyNet?</string>
<string name="setup_done">Configurazione completata.</string>
<string name="setup_fail">Configurazione fallita.</string>
<string name="env_fix_title">Richiedi configurazione aggiuntiva</string>
<string name="env_fix_msg">Il tuo dispositivo necessita di una configurazione aggiuntiva per far funzionare Magisk correttamente. Verrà scaricato il file zip di Magisk, vuoi procedere ora?</string>
<string name="setup_title">Configurazione aggiuntiva</string>
<string name="setup_msg">Configurazione dell\'ambiente in corso…</string>
<string name="downloading_toast">Download di %1$s</string>
<string name="no_rw_storage">Questa funzione non sarà attiva senza l\'autorizzazione di scrittura nella memoria di archiviazione.</string>
<string name="dl_one_module">Scarica un modulo alla volta.</string>
<!--Settings Activity -->
<string name="settings_general_category">Generale</string>
<string name="settings_dark_theme_title">Tema scuro</string>
<string name="settings_dark_theme_summary">Abilita il tema scuro.</string>
<string name="settings_clear_cache_title">Svuota cache repository</string>
<string name="settings_clear_cache_summary">Svuota la cache delle repository. Questa opzione forza l\'aggiornamento online dell\'app.</string>
<string name="settings_hide_manager_title">Nascondi Magisk Manager</string>
<string name="settings_hide_manager_summary">Reinstalla Magisk Manager con un nome pacchetto casuale.</string>
<string name="settings_restore_manager_title">Ripristina Magisk Manager</string>
<string name="settings_restore_manager_summary">Ripristina Magisk Manager con il nome pacchetto originale</string>
<string name="language">Lingua</string>
<string name="system_default">(Sistema)</string>
<string name="settings_update">Impostazioni aggiornamento</string>
<string name="settings_check_update_title">Controlla aggiornamenti</string>
<string name="settings_check_update_summary">Controlla automaticamente gli aggiornamenti in background.</string>
<string name="settings_update_channel_title">Canale di aggiornamento</string>
<string name="settings_update_stable">Stabile</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalizzato</string>
<string name="settings_update_custom_msg">Inserisci un URL personalizzato</string>
<string name="settings_boot_format_title">Formato dell\'immagine di boot aggiornata</string>
<string name="settings_boot_format_summary">Seleziona il formato nel quale la nuova immagine di boot verrà salvata.\nSeleziona .img per il flash in Fastboot/Download Mode; Seleziona .img.tar per il flash con Odin.</string>
<string name="settings_core_only_title">Modalità Magisk Core</string>
<string name="settings_core_only_summary">Abilita solo le funzioni principali. Nessun modulo verrà caricato. MagiskSU e MagiskHide rimarranno abilitati</string>
<string name="settings_magiskhide_summary">Nasconde Magisk da numerose rilevazioni.</string>
<string name="settings_hosts_title">Host systemless</string>
<string name="settings_hosts_summary">Supporto a host systemless per le app che bloccano le pubblicità.</string>
<string name="settings_hosts_toast">Aggiunto modulo per host systemless</string>
<string name="settings_su_app_adb">App e ADB</string>
<string name="settings_su_app">Solo app</string>
<string name="settings_su_adb">Solo ADB</string>
<string name="settings_su_disable">Disabilitato</string>
<string name="settings_su_request_10">10 secondi</string>
<string name="settings_su_request_15">15 secondi</string>
<string name="settings_su_request_20">20 secondi</string>
<string name="settings_su_request_30">30 secondi</string>
<string name="settings_su_request_45">45 secondi</string>
<string name="settings_su_request_60">60 secondi</string>
<string name="superuser_access">Accesso Superuser</string>
<string name="auto_response">Accesso predefinito</string>
<string name="request_timeout">Timeout richiesta</string>
<string name="superuser_notification">Notifica Superuser</string>
<string name="request_timeout_summary">%1$d secondi</string>
<string name="settings_su_reauth_title">Riautentica dopo aggiornamento</string>
<string name="settings_su_reauth_summary">Riautentica i permessi Superuser dopo un aggiornamento dell\'app</string>
<string name="settings_su_fingerprint_title">Abilita autenticazione impronta</string>
<string name="settings_su_fingerprint_summary">Utilizza il sensore di impronte per accettare le richieste Superuser</string>
<string name="auth_fingerprint">Conferma Impronta</string>
<string name="multiuser_mode">Modalità multiutente</string>
<string name="settings_owner_only">Solo proprietario del dispositivo</string>
<string name="settings_owner_manage">Gestito dal proprietario utente</string>
<string name="settings_user_independent">Idipendente dall\'utente</string>
<string name="owner_only_summary">Solo il proprietario ha i permessi di root.</string>
<string name="owner_manage_summary">Solo il proprietario può gestire accesso root e ricevere richieste.</string>
<string name="user_indepenent_summary">Ogni utente ha le sue regole di root indpendenti.</string>
<string name="mount_namespace_mode">Modalità mount namespace</string>
<string name="settings_ns_global">Namespace globale</string>
<string name="settings_ns_requester">Namespace ereditato</string>
<string name="settings_ns_isolate">Namespace isolato</string>
<string name="global_summary">Tutte le sessioni di root erediteranno il namespace globale.</string>
<string name="requester_summary">Le sessioni di root erediteranno il namespace del loro richiedente.</string>
<string name="isolate_summary">Ogni sessione di root avrà il suo namespace isolato.</string>
<string name="android_o_not_support">Non è supportato da Android 8.0+.</string>
<string name="disable_fingerprint">Non è presente alcuna impronta o il dispositivo non è supportato.</string>
<!--Superuser-->
<string name="su_request_title">Richiesta Superuser</string>
<string name="deny_with_str">Nega %1$s</string>
<string name="deny">Nega</string>
<string name="prompt">Chiedi</string>
<string name="grant">Concedi</string>
<string name="su_warning">Concede il pieno accesso al dispositivo.\nNega se non sei sicuro</string>
<string name="forever">Sempre</string>
<string name="once">Una volta</string>
<string name="tenmin">10 minuti</string>
<string name="twentymin">20 minuti</string>
<string name="thirtymin">30 minuti</string>
<string name="sixtymin">60 minuti</string>
<string name="su_allow_toast">%1$s ha ottenuto i permessi Superuser</string>
<string name="su_deny_toast">%1$s non ha ottenuto i permessi Superuser</string>
<string name="no_apps_found">Nessuna app trovata</string>
<string name="su_snack_grant"> %1$s ha ottenuto i permessi Superuser</string>
<string name="su_snack_deny"> %1$s non ha ottenuto i permessi Superuser</string>
<string name="su_snack_notif_on">Notifiche per %1$s abilitate</string>
<string name="su_snack_notif_off">Notifiche per %1$s disabilitate</string>
<string name="su_snack_log_on">Registro eventi abilitato per %1$s</string>
<string name="su_snack_log_off">Registro eventi non abilitato per %1$s</string>
<string name="su_snack_revoke">I diritti di %1$s sono stati revocati</string>
<string name="su_revoke_title">Vuoi revocare?</string>
<string name="su_revoke_msg">Confermi la revoca dei diritti di %1$s?</string>
<string name="toast">Toast</string>
<string name="none">Nessuno</string>
<string name="auth_fail">Autenticatione fallita</string>
<!--Superuser logs-->
<string name="target_uid">UID destinazione: %1$d</string>
<string name="command">Comando: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Mostra app di sistema</string>
</resources>

View File

@@ -1,218 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">モジュール</string>
<string name="downloads">ダウンロード</string>
<string name="superuser">スーパーユーザー</string>
<string name="log">ログ</string>
<string name="settings">設定</string>
<string name="install">インストール</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magiskがインストールされていません</string>
<string name="checking_for_updates">更新を確認中…</string>
<string name="invalid_update_channel">不正な更新チャンネルです</string>
<string name="safetyNet_check_text">タップしてSafetyNetチェックを開始</string>
<string name="checking_safetyNet_status">SafetyNetの状態をチェック中…</string>
<string name="safetyNet_check_success">SafetyNetチェック成功</string>
<string name="safetyNet_api_error">SafetyNet APIエラー</string>
<string name="safetyNet_res_invalid">応答が不正です</string>
<!--Install Fragment-->
<string name="advanced_settings_title">高度な設定</string>
<string name="keep_force_encryption">強制的な暗号化を維持する</string>
<string name="keep_dm_verity">AVB 2.0/dm-verityを維持する</string>
<string name="current_installed">インストール済: %1$s</string>
<string name="latest_version">最新: %1$s</string>
<string name="uninstall">アンインストール</string>
<string name="uninstall_magisk_title">Magiskのアンインストール</string>
<string name="uninstall_magisk_msg">すべてのモジュールが無効化/削除されます。Rootも無効化され、ストレージが暗号化されていない場合、暗号化される場合があります</string>
<string name="update">更新</string>
<!--Module Fragment-->
<string name="no_info_provided">(情報がありません)</string>
<string name="no_modules_found">モジュールが見つかりません</string>
<string name="update_file_created">次の再起動時にモジュールを更新する</string>
<string name="remove_file_created">次の再起動時にモジュールを削除する</string>
<string name="remove_file_deleted">次の再起動時にモジュールを削除しない</string>
<string name="disable_file_created">次の再起動時にモジュールを無効にする</string>
<string name="disable_file_removed">次の再起動時にモジュールを有効にする</string>
<string name="author">開発者: %1$s</string>
<string name="reboot_recovery">リカバリへ再起動</string>
<string name="reboot_bootloader">Bootloaderへ再起動</string>
<string name="reboot_download">Downloadへ再起動</string>
<!--Repo Fragment-->
<string name="update_available">更新あり</string>
<string name="installed">インストール済</string>
<string name="not_installed">未インストール</string>
<string name="updated_on">更新日: %1$s</string>
<string name="sorting_order">並び順</string>
<string name="sort_by_name">名前順</string>
<string name="sort_by_update">最終更新日順</string>
<!--Log Fragment-->
<string name="menuSaveLog">ログの保存</string>
<string name="menuReload">再読み込み</string>
<string name="menuClearLog">ログの消去</string>
<string name="logs_cleared">ログを消去しました</string>
<string name="log_is_empty">ログは空です</string>
<!--About Activity-->
<string name="app_changelog">アプリの更新履歴</string>
<string name="translators">小鳥遊桜 (@SakuraSa233) / hota (@lindwurm) / AndroPlus (@AndroPlus_org)</string>
<string name="app_translators">アプリの翻訳者</string>
<!-- System Components, Notifications -->
<string name="update_channel">Magiskの更新</string>
<string name="progress_channel">進捗通知</string>
<string name="download_complete">ダウンロード完了</string>
<string name="download_file_error">ダウンロード中にエラーが発生しました</string>
<string name="magisk_update_title">新しいMagiskの更新が利用可能です</string>
<string name="manager_update_title">Magisk Managerの更新があります</string>
<!--Toasts, Dialogs-->
<string name="close">閉じる</string>
<string name="repo_install_title">%1$s をインストール</string>
<string name="repo_install_msg">%1$s をインストールしますか?</string>
<string name="download">ダウンロード</string>
<string name="reboot">再起動</string>
<string name="settings_reboot_toast">再起動して設定を適用する</string>
<string name="release_notes">更新履歴</string>
<string name="repo_cache_cleared">リポジトリキャッシュを消去しました</string>
<string name="internal_storage">ZIPは\n[内部ストレージ]%1$sに保存されます</string>
<string name="manager_download_install">タップでダウンロードしてインストールします</string>
<string name="dtbo_patched_title">DTBOをパッチしました</string>
<string name="dtbo_patched_reboot">Magisk Managerはdtbo.imgをパッチしました。再起動してください</string>
<string name="flashing">書き込み中</string>
<string name="hide_manager_title">Magisk Managerを隠しています…</string>
<string name="hide_manager_fail_toast">Magisk Managerを隠せませんでした…</string>
<string name="open_link_failed_toast">このリンクを開けアプリがありません。</string>
<string name="download_zip_only">ZIPのみダウンロード</string>
<string name="patch_boot_file">Bootイメージのパッチ</string>
<string name="direct_install">直接インストール (推奨)</string>
<string name="install_inactive_slot">Inactive Slotにインストール (OTA後)</string>
<string name="warning">警告</string>
<string name="install_inactive_slot_msg">お使いのデバイスは再起動後に現在のInactive Slotで強制に起動されます\nこのオプションはOTA後に使うのみ。\n続行しますか?</string>
<string name="select_method">方法の選択</string>
<string name="boot_file_patch_msg">StockのBootイメージ (.img または .img.tar形式) を選択してください</string>
<string name="complete_uninstall">完全にアンインストール</string>
<string name="restore_img">イメージのリストア</string>
<string name="restore_img_msg">リストア中…</string>
<string name="restore_done">リストア完了!</string>
<string name="restore_fail">Stockのバックアップがありません</string>
<string name="proprietary_title">プロプライエタリコードのダウンロード</string>
<string name="proprietary_notice">Magisk ManagerはFOSSのため、GoogleのプロプライエタリなSafetyNet APIコードを含んでいません。\n\nMagisk ManagerがSafetyNetチェックのための拡張機能 (GoogleApiClientを含む) をダウンロードすることを許可しますか?</string>
<string name="setup_done">セットアップ完了。</string>
<string name="setup_fail">セットアップに失敗しました。</string>
<string name="env_fix_title">追加セットアップが必要</string>
<string name="env_fix_msg">Magiskを正常に機能させるには、お使いのデバイスに追加セットアップが必要です。Magiskセットアップzipをダウンロードします。今すぐ続行しますか。</string>
<string name="setup_title">追加セットアップ</string>
<string name="setup_msg">環境セットアップを実行中…</string>
<string name="downloading_toast">%1$s をダウンロード中</string>
<string name="no_rw_storage">この機能は外部ストレージへの書き込み権限がないと動作しません</string>
<string name="dl_one_module">一回で1つのモジュールをダウンロードする。</string>
<!--Settings Activity -->
<string name="settings_general_category">一般</string>
<string name="settings_dark_theme_title">ダークテーマ</string>
<string name="settings_dark_theme_summary">ダークテーマを有効化します</string>
<string name="settings_clear_cache_title">キャッシュを消去</string>
<string name="settings_clear_cache_summary">オンラインリポジトリのキャッシュされた情報を消去し、アプリをオンラインで更新します</string>
<string name="settings_hide_manager_title">Magisk Managerを隠す</string>
<string name="settings_hide_manager_summary">Magisk Managerをランダムなパッケージ名で再パックします</string>
<string name="settings_restore_manager_title">Magisk Managerを復元</string>
<string name="settings_restore_manager_summary">元のパッケージでMagisk Managerを復元します。</string>
<string name="language">言語</string>
<string name="system_default">(システム標準)</string>
<string name="settings_update">更新設定</string>
<string name="settings_check_update_title">更新をチェック</string>
<string name="settings_check_update_summary">バックグラウンドで定期的に更新をチェックします。</string>
<string name="settings_update_channel_title">更新チャンネル</string>
<string name="settings_update_stable">安定版</string>
<string name="settings_update_beta">開発版</string>
<string name="settings_update_custom">カスタム</string>
<string name="settings_update_custom_msg">カスタムURLを入力</string>
<string name="settings_boot_format_title">パッチしたBootの出力形式</string>
<string name="settings_boot_format_summary">パッチしたBootイメージの出力形式を選択してください。\nfastboot/download modeでインストールするには .img を、ODINでインストールするには .img.tar を選択してください</string>
<string name="settings_core_only_title">Magisk コアモード</string>
<string name="settings_core_only_summary">コア機能のみを有効にします。すべてのモジュールが読み込まれなくなります。 MagiskSU、MagiskHide は引き続き有効になります</string>
<string name="settings_magiskhide_summary">さまざまな検出からMagiskを隠します</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">広告ブロックアプリのためのSystemless hostsサポートを有効化します</string>
<string name="settings_hosts_toast">systemless hostsモジュールを追加しました。</string>
<string name="settings_su_app_adb">アプリとADB</string>
<string name="settings_su_app">アプリのみ</string>
<string name="settings_su_adb">ADBのみ</string>
<string name="settings_su_disable">無効</string>
<string name="settings_su_request_10">10秒</string>
<string name="settings_su_request_15">15秒</string>
<string name="settings_su_request_20">20秒</string>
<string name="settings_su_request_30">30秒</string>
<string name="settings_su_request_45">45秒</string>
<string name="settings_su_request_60">60秒</string>
<string name="superuser_access">スーパーユーザーアクセス</string>
<string name="auto_response">自動応答</string>
<string name="request_timeout">リクエストタイムアウト</string>
<string name="superuser_notification">スーパーユーザー通知</string>
<string name="request_timeout_summary">%1$d秒</string>
<string name="settings_su_reauth_title">アップグレード後の再認証</string>
<string name="settings_su_reauth_summary">アプリのアップグレード後にスーパーユーザー権限を再認証します</string>
<string name="settings_su_fingerprint_title">指紋認証の有効化</string>
<string name="settings_su_fingerprint_summary">スーパーユーザー権限のリクエストの許可に指紋認証を使います</string>
<string name="auth_fingerprint">指紋認証</string>
<string name="multiuser_mode">マルチユーザーモード</string>
<string name="settings_owner_only">端末の管理者のみ</string>
<string name="settings_owner_manage">端末の管理者が管理</string>
<string name="settings_user_independent">ユーザー毎</string>
<string name="owner_only_summary">端末の管理者のみスーパーユーザー権限を利用できます</string>
<string name="owner_manage_summary">端末の管理者のみがスーパーユーザー権限を管理し、リクエストを受け付けられます</string>
<string name="user_indepenent_summary">ユーザー毎にそれぞれスーパーユーザー権限を設定できます</string>
<string name="mount_namespace_mode">名前空間のマウントモード</string>
<string name="settings_ns_global">グローバル名前空間</string>
<string name="settings_ns_requester">継承された名前空間</string>
<string name="settings_ns_isolate">分離された名前空間</string>
<string name="global_summary">すべてのrootセッションがグローバル名前空間を使用します</string>
<string name="requester_summary">rootセッションはリクエスト者の名前空間を継承します</string>
<string name="isolate_summary">rootセッション毎に分離された名前空間を使用します</string>
<string name="android_o_not_support">Android 8.0以降では対応していません</string>
<string name="disable_fingerprint">登録した指紋がありません、またはデバイスはサポートしていません。</string>
<!--Superuser-->
<string name="su_request_title">スーパーユーザーリクエスト</string>
<string name="deny_with_str">拒否 %1$s</string>
<string name="deny">拒否</string>
<string name="prompt">プロンプト</string>
<string name="grant">許可</string>
<string name="su_warning">端末への完全なアクセスを許可します。\nもし確信が持てなければ拒否してください</string>
<string name="forever">今後も</string>
<string name="once">一度だけ</string>
<string name="tenmin">10分</string>
<string name="twentymin">20分</string>
<string name="thirtymin">30分</string>
<string name="sixtymin">60分</string>
<string name="su_allow_toast">%1$s はスーパーユーザー権限を許可されました</string>
<string name="su_deny_toast">%1$s はスーパーユーザー権限を拒否されました</string>
<string name="no_apps_found">アプリが見つかりません</string>
<string name="su_snack_grant">%1$s のスーパーユーザー権限が許可されました</string>
<string name="su_snack_deny">%1$s のスーパーユーザー権限は拒否されました</string>
<string name="su_snack_notif_on">%1$s の通知は有効です</string>
<string name="su_snack_notif_off">%1$s の通知は無効です</string>
<string name="su_snack_log_on">%1$s のログは有効です</string>
<string name="su_snack_log_off">%1$s のログは無効です</string>
<string name="su_snack_revoke">%1$s の権限は取り消されました</string>
<string name="su_revoke_title">確認</string>
<string name="su_revoke_msg">%1$s の権限を取り消しますか?</string>
<string name="toast">トースト通知</string>
<string name="none">なし</string>
<string name="auth_fail">認証に失敗しました</string>
<!--Superuser logs-->
<!-- <string name="pid" translatable="false">PID: %1$d</string> -->
<string name="target_uid">ターゲット UID: %1$d</string>
<string name="command">コマンド: %1$s</string>
</resources>

View File

@@ -1,131 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">모듈</string>
<string name="downloads">다운로드</string>
<string name="superuser">슈퍼유저</string>
<string name="log">로그</string>
<string name="settings">설정</string>
<string name="install">설치</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk가 설치되지 않음</string>
<string name="checking_for_updates">업데이트 확인 중…</string>
<string name="safetyNet_check_text">SafetyNet 체크를 시작하려면 누르기</string>
<string name="checking_safetyNet_status">SafetyNet 상태 확인 중…</string>
<!--Install Fragment-->
<string name="advanced_settings_title">고급 설정</string>
<string name="keep_force_encryption">강제 암호화 유지</string>
<string name="keep_dm_verity">AVB 2.0/dm-verity 유지</string>
<string name="current_installed">설치된: %1$s</string>
<string name="latest_version">최신: %1$s</string>
<string name="uninstall">제거</string>
<string name="uninstall_magisk_title">Magisk 제거</string>
<!--Module Fragment-->
<string name="no_info_provided">(제공된 정보 없음)</string>
<string name="no_modules_found">검색된 모듈 없음</string>
<string name="update_file_created">모듈이 다음 다시 시작 시 업데이트됨</string>
<string name="remove_file_created">모듈이 다음 다시 시작 시 제거됨</string>
<string name="remove_file_deleted">모듈이 다음 다시 시작 시 제거되지 않음</string>
<string name="disable_file_created">모듈이 다음 다시 시작 시 비활성화됨</string>
<string name="disable_file_removed">모듈이 다음 다시 시작 시 활성화됨</string>
<string name="author">제작: %1$s</string>
<!--Repo Fragment-->
<string name="update_available">업데이트 있음</string>
<string name="installed">설치됨</string>
<string name="not_installed">설치되지 않음</string>
<!--Log Fragment-->
<string name="menuSaveLog">저장 로그</string>
<string name="menuReload">다시 불러오기</string>
<string name="menuClearLog">지금 로그 비우기</string>
<string name="logs_cleared">로그가 성공적으로 비워짐</string>
<string name="log_is_empty">로그가 비어 있음</string>
<!--About Activity-->
<string name="app_changelog">앱 변경 사항</string>
<string name="translators">lilymaniac</string>
<string name="app_translators">앱 번역자</string>
<!--Toasts, Dialogs-->
<string name="close">닫기</string>
<string name="repo_install_title">%1$s 설치</string>
<string name="repo_install_msg">정말 %1$s을(를) 설치하시겠습니까?</string>
<string name="reboot">다시 시작</string>
<string name="magisk_update_title">새 버전의 Magisk를 사용할 수 있습니다!</string>
<string name="settings_reboot_toast">기기를 다시 시작하면 설정이 적용됩니다.</string>
<string name="release_notes">릴리즈 노트</string>
<string name="repo_cache_cleared">저장소 캐시 비워짐</string>
<string name="internal_storage">zip 파일이 다음 위치에 저장됨:\n[내부 저장소]%1$s</string>
<string name="download_file_error">파일 다운로드 오류</string>
<string name="downloading_toast">%1$s 다운로드 중</string>
<string name="no_rw_storage">이 기능은 외부 저장소 쓰기 권한 없이는 작동하지 않습니다.</string>
<!--Settings Activity -->
<string name="settings_general_category">일반</string>
<string name="settings_dark_theme_title">어두운 테마</string>
<string name="settings_dark_theme_summary">어두운 테마 사용</string>
<string name="settings_clear_cache_title">저장소 캐시 비우기</string>
<string name="settings_clear_cache_summary">온라인 저장소에 대해 캐시된 정보를 지우고, 온라인에서 정보를 강제로 새로 고칩니다.</string>
<string name="settings_core_only_title">Magisk 핵심 기능 모드</string>
<string name="settings_core_only_summary">핵심 기능만 사용합니다. 모든 모듈은 로드하지 않습니다. MagiskSU 및 MagiskHide 는 계속 사용할 수 있습니다.</string>
<string name="settings_magiskhide_summary">다양한 감지로부터 Magisk를 숨깁니다.</string>
<string name="settings_hosts_title">systemless hosts</string>
<string name="settings_hosts_summary">광고 차단 앱에서 사용하는 systemless hosts를 지원합니다.</string>
<string name="settings_su_app_adb">앱 및 ADB</string>
<string name="settings_su_app">앱만</string>
<string name="settings_su_adb">ADB만</string>
<string name="settings_su_disable">사용 안 함</string>
<string name="settings_su_request_10">10초</string>
<string name="settings_su_request_15">15초</string>
<string name="settings_su_request_20">20초</string>
<string name="settings_su_request_30">30초</string>
<string name="settings_su_request_45">45초</string>
<string name="settings_su_request_60">60초</string>
<string name="superuser_access">슈퍼유저 액세스</string>
<string name="auto_response">자동 응답</string>
<string name="request_timeout">요청 시간 제한</string>
<string name="superuser_notification">슈퍼유저 알림</string>
<string name="request_timeout_summary">%1$d초</string>
<!--Superuser-->
<string name="su_request_title">슈퍼유저 요청</string>
<string name="deny_with_str">거부%1$s</string>
<string name="deny">거부</string>
<string name="prompt">메시지</string>
<string name="grant">허용</string>
<string name="su_warning">기기에 대한 전체 액세스 권한을 부여합니다.\n확실하지 않은 경우 거부하세요!</string>
<string name="forever">영구적으로</string>
<string name="once">한 번만</string>
<string name="tenmin">10분</string>
<string name="twentymin">20분</string>
<string name="thirtymin">30분</string>
<string name="sixtymin">60분</string>
<string name="su_allow_toast">%1$s에 슈퍼유저 권한이 허용됨</string>
<string name="su_deny_toast">%1$s에 슈퍼유저 권한이 거부됨</string>
<string name="no_apps_found">검색된 앱 없음</string>
<string name="su_snack_grant">%1$s의 슈퍼유저 권한이 허용됨</string>
<string name="su_snack_deny">%1$s의 슈퍼유저 권한이 거부됨</string>
<string name="su_snack_notif_on">%1$s의 알림이 활성화됨</string>
<string name="su_snack_notif_off">%1$s의 알림이 비활성화됨</string>
<string name="su_snack_log_on">%1$s의 로깅이 활성화됨</string>
<string name="su_snack_log_off">%1$s의 로깅이 비활성화됨</string>
<string name="su_snack_revoke">%1$s의 권한이 취소됨</string>
<string name="su_revoke_title">취소하시겠습니까?</string>
<string name="su_revoke_msg">정말 %1$s의 권한을 취소하시겠습니까?</string>
<string name="toast">토스트</string>
<string name="none">없음</string>
<!--Superuser logs-->
<string name="target_uid">대상 UID: %1$d</string>
<string name="command">명령: %1$s</string>
<string name="download">다운로드</string>
</resources>

View File

@@ -1,206 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Papildiniai</string>
<string name="downloads">Papildinių parduotuvė</string>
<string name="superuser">Supervartotojas</string>
<string name="log">Įvykių sąrašas</string>
<string name="settings">Nustatymai</string>
<string name="install">Instaliuoti</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk yra neinstaliuotas</string>
<string name="checking_for_updates">Ieškoma atnaujinimų…</string>
<string name="invalid_update_channel">Neteisingas atnaujinimų nustatymas</string>
<string name="safetyNet_check_text">Paspauskite SafetyNet paieškai</string>
<string name="checking_safetyNet_status">Ieškomas SafetyNet statusas…</string>
<string name="safetyNet_check_success">SafetyNet Paieška sėkminga</string>
<string name="safetyNet_api_error">SafetyNet API Klaida</string>
<string name="safetyNet_res_invalid">Gautas neteisingas atsakymas</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Išplėstiniai nustatymai</string>
<string name="keep_force_encryption">Palikti priverstinį šifravimą</string>
<string name="keep_dm_verity">Palikti dm-verity</string>
<string name="current_installed">Instaliuota: %1$s</string>
<string name="latest_version">Naujausia: %1$s</string>
<string name="uninstall">Pašalinti</string>
<string name="uninstall_magisk_title">Pašalinti Magisk</string>
<string name="uninstall_magisk_msg">Visi papildiniai bus išjungti/pašalinti. Root bus panaikintas. Yra galimybė, kad duomenys bus užšifruoti…</string>
<string name="update">Atnaujinti</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nėra informacijos)</string>
<string name="no_modules_found">Papildinių nesurasta</string>
<string name="update_file_created">Perkrovus sistemą papildinys bus atnaujintas</string>
<string name="remove_file_created">Perkrovus sistemą papildinys bus panaikintas</string>
<string name="remove_file_deleted">Perkrovus sistemą papildinys nebus panaikintas</string>
<string name="disable_file_created">Perkrovus sistemą papildinys bus išjungtas, tačiau nepanaikintas</string>
<string name="disable_file_removed">Perkrovus sistemą papildinys bus įjungtas</string>
<string name="author">Sukūrė %1$s</string>
<string name="reboot_recovery">Perkrauti į Recovery</string>
<string name="reboot_bootloader">Perkrauti į Bootloader</string>
<string name="reboot_download">Perkrauti į Download režimą</string>
<!--Repo Fragment-->
<string name="update_available">Galimas atnaujinimas</string>
<string name="installed">Instaliuota</string>
<string name="not_installed">Neinstaliuota</string>
<string name="updated_on">Atnaujinta: %1$s</string>
<string name="sorting_order">Išdėliojimo tvarka</string>
<string name="sort_by_name">Išdėlioti pagal pavadinimą (A-Z)</string>
<string name="sort_by_update">Išdėlioti pagal atnaujinimo datą (Naujausi-Seniausi)</string>
<!--Log Fragment-->
<string name="menuSaveLog">Išsaugoti įvykių sąrašą</string>
<string name="menuReload">Įvykių sąrašo atnaujinmas</string>
<string name="menuClearLog">Išvalyti įvykių sąrašą</string>
<string name="logs_cleared">Įvykių sąrašas pašalintas</string>
<string name="log_is_empty">Įvykių sąrašas tuščias</string>
<!--About Activity-->
<string name="app_changelog">Pakeitimų sąrašas</string>
<string name="translators">Vv2233Bb</string>
<string name="app_translators">Vertėjai</string>
<!--Toasts, Dialogs-->
<string name="close">Uždaryti</string>
<string name="repo_install_title">Instaliuoti %1$s</string>
<string name="repo_install_msg">Ar jūs norite instaliuoti %1$s?</string>
<string name="download">Atsisiųsti</string>
<string name="reboot">Perkrauti</string>
<string name="magisk_update_title">Atsirado nauja Magisk versija!</string>
<string name="settings_reboot_toast">Nustatymų įgalinimui prašome perkrauti telefoną</string>
<string name="release_notes">Pakeitimai</string>
<string name="repo_cache_cleared">Repo failai išvalyti</string>
<string name="internal_storage">Zip failas yra saugomas:\n[Internal Storage]%1$s</string>
<string name="manager_update_title">Atsirado naujas Magisk Manager atnaujinimas!</string>
<string name="manager_download_install">Paspauskite, kad atsisiųstumėte ir instaliuotumėte</string>
<string name="dtbo_patched_title">DTBO buvo ištaisytas!</string>
<string name="dtbo_patched_reboot">Magisk Manager ištaisė dtbo.img, prašome perkrauti telefoną</string>
<string name="update_channel">Magisk Atnaujinimai</string>
<string name="flashing">Instaliuojama</string>
<string name="hide_manager_title">Magisk Manager paslėpiamas…</string>
<string name="hide_manager_fail_toast">Magisk Manager paslėpimas žlugo…</string>
<string name="download_zip_only">Atsisiųsti zip failą</string>
<string name="patch_boot_file">Ištaisyti boot failą</string>
<string name="direct_install">Tiesioginis instaliavimas (Rekomenduojamas)</string>
<string name="select_method">Pasirinkite metodą</string>
<string name="boot_file_patch_msg">Pasirinkti boot failą .img ar .img.tar formate</string>
<string name="complete_uninstall">Pilnas pašalinimas</string>
<string name="restore_img">Atstatyti boot failą</string>
<string name="restore_img_msg">Atstatome…</string>
<string name="restore_done">Atstatymas įvykdytas!</string>
<string name="restore_fail">Gamyklinis atstatymo failas neegzistuoja!</string>
<string name="proprietary_title">Atsisiųsti patentuotą kodą</string>
<string name="proprietary_notice">Magisk Manager yra FOSS todėl neturi Google patentuoto SafetyNet API kodo.\n\nAr jūs leidžiate Magisk Manager atsisiųsti papildinį (turintį GoogleApiClient) SafetyNet paieškai?</string>
<string name="setup_done">Pasiruošimas baigtas</string>
<string name="setup_fail">Pasiruošimas nesėkmingas</string>
<string name="env_fix_title">Reikalingas papildomas pasiruošimas</string>
<string name="env_fix_msg">Kad Magisk veiktų tinkamai, jūsų įrenginiui reikia papildomo paruošimo. Tai atsisiųs papildomą Magisk zip failą, ar norite tęsti?</string>
<string name="setup_title">Papildomas pasiruošimas</string>
<string name="setup_msg">Paruošiama aplinka…</string>
<string name="download_file_error">Atsisiunčiant failą įvyko klaida</string>
<string name="downloading_toast">Atsisiunčiamas %1$s</string>
<string name="no_rw_storage">Ši funkija neveiks be prieigos prie saugyklos</string>
<!--Settings Activity -->
<string name="settings_general_category">Pagrininiai</string>
<string name="settings_dark_theme_title">Tamsi tema</string>
<string name="settings_dark_theme_summary">Įjungti tamsią temą</string>
<string name="settings_clear_cache_title">Išvalyti nereikalingus saugyklos failus</string>
<string name="settings_clear_cache_summary">Išvalyti patalpintą informaciją talpykloms internete, priverčia perkrauti interneto jungtį</string>
<string name="settings_hide_manager_title">Paslėpti Magisk Manager</string>
<string name="settings_hide_manager_summary">Perpakuoti Magisk Manager su atsitiktiniu pakuotės pavadinimu</string>
<string name="settings_restore_manager_title">Grąžinti Magisk Manager</string>
<string name="settings_restore_manager_summary">Grąžinti Magisk Manager su orginalia pakuote</string>
<string name="language">Kalba</string>
<string name="system_default">(Sistemos)</string>
<string name="settings_update">Atnaujinimų nustatymai</string>
<string name="settings_check_update_title">Automatiškas atnaujinimų ieškojimas</string>
<string name="settings_check_update_summary">Automatiškai ieškoti Magisk ir Magisk Manager atnaujinimų</string>
<string name="settings_update_channel_title">Atnaujinimų tipai</string>
<string name="settings_update_stable">Stabilūs</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Pasirinktiniai</string>
<string name="settings_update_custom_msg">Įvesti pasirinktinį URL</string>
<string name="settings_boot_format_title">Boot failo formatas</string>
<string name="settings_boot_format_summary">Pasirinkti boot failo formatą.\n.img naudojamas įdiegimui per fastboot/download; .img.tar naudojamas įdiegimui per ODIN</string>
<string name="settings_core_only_title">Pagrindinis Magisk režimas</string>
<string name="settings_core_only_summary">Įgalinti tik pagrindines funkcijas, išjungti visus papildinius. MagiskSU ir Magisk Hide liks įgalinti</string>
<string name="settings_magiskhide_summary">Paslėpti Magisk nuo įvairių susekimų</string>
<string name="settings_hosts_title">Sistemos padejėjai</string>
<string name="settings_hosts_summary">Įgalinti sistemos padejėjus Adblock programėlėms</string>
<string name="settings_su_app_adb">Programėlėms ir ADB</string>
<string name="settings_su_app">Tik programėlėms</string>
<string name="settings_su_adb">Tik ADB</string>
<string name="settings_su_disable">Išjungta</string>
<string name="settings_su_request_10">10 sekundžių</string>
<string name="settings_su_request_15">15 sekundžių</string>
<string name="settings_su_request_20">20 sekundžių</string>
<string name="settings_su_request_30">30 sekundžių</string>
<string name="settings_su_request_45">45 sekundžių</string>
<string name="settings_su_request_60">60 sekundžių</string>
<string name="superuser_access">Supervartotojo prieiga</string>
<string name="auto_response">Automatinis atsakymas</string>
<string name="request_timeout">Prašymo laikas baigiasi po</string>
<string name="superuser_notification">Supervartotojo pranešimai</string>
<string name="request_timeout_summary">%1$d sekundžių</string>
<string name="settings_su_reauth_title">Pakartotinai patvirtinti po atnaujinimo</string>
<string name="settings_su_reauth_summary">Pakartotinai patvirtinti supervartotojo leidimus po programėlės atnaujinimo</string>
<string name="settings_su_fingerprint_title">Įgalinti patvirtinimą piršto antspaudu</string>
<string name="settings_su_fingerprint_summary">Naudoti piršto antspaudą supervartotojo leidimo prašymų atsakymui</string>
<string name="multiuser_mode">Daugialypio vartotojo režimas</string>
<string name="settings_owner_only">Tik įrenginio savininkas</string>
<string name="settings_owner_manage">Įrenginio savininko valdomas</string>
<string name="settings_user_independent">Visų</string>
<string name="owner_only_summary">Tik įrenginio savininkas turi root prieigą</string>
<string name="owner_manage_summary">Tik įrenginio savinkas gali tvarkyti root prieigą ir gauti lenteles prašančias root prieigos</string>
<string name="user_indepenent_summary">Kiekvienas vartotojas turi savo atskiras root taisykles</string>
<string name="mount_namespace_mode">Root sesijos vardų srities režimas</string>
<string name="settings_ns_global">Globali vardų sritis</string>
<string name="settings_ns_requester">Paveldima vardų sritis</string>
<string name="settings_ns_isolate">Izoliuota vardų sritis</string>
<string name="global_summary">Visos root sesijos naudoja globalią vardų sritį</string>
<string name="requester_summary">Root sesijos paveldi jos išprašytojo/s vardų sritį</string>
<string name="isolate_summary">Kiekviena root sesija turi savo izoliuotą vardų sritį</string>
<string name="android_o_not_support">Įrenginiai su Android 8.0+ nepalaiko šio nustatymo</string>
<string name="disable_fingerprint">Jūsų įrenginyje nebuvo surasta pirštų antspaudų arba jūsų įrenginys neturi pirštų antspaudų skaitytuvo</string>
<!--Superuser-->
<string name="su_request_title">Supervartotojo prašymas</string>
<string name="deny_with_str">Atmesti%1$s</string>
<string name="deny">Atmesti</string>
<string name="prompt">Klausti</string>
<string name="grant">Suteikti(a)</string>
<string name="su_warning">Supervartotojo prieiga suteikia pilną prieigą prie jūsų įrenginio\nAtmeskite jei neesate tikri dėl programėlės patikimumo!</string>
<string name="forever">Visados</string>
<string name="once">Vieną kartą</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s gavo supervartotojo teises</string>
<string name="su_deny_toast">%1$s negavo supervartotojo teisių</string>
<string name="no_apps_found">Nėra surastų programėlių</string>
<string name="su_snack_grant">%1$s supervartotojo teisių prašymas buvo atsakytas teigiamai</string>
<string name="su_snack_deny">%1$s supervartotojo teisių prašymas buvo atmestas</string>
<string name="su_snack_notif_on">Buvo įjungta %1$s pranešimai</string>
<string name="su_snack_notif_off">Buvo išjungta %1$s pranešimai</string>
<string name="su_snack_log_on">%1$s įvykių surašymas yra įgalintas</string>
<string name="su_snack_log_off">%1$s įvykių surašymas yra išjungtas</string>
<string name="su_snack_revoke">%1$s supervartotojo teisės atimtos</string>
<string name="su_revoke_title">Neleisti?</string>
<string name="su_revoke_msg">Neleisti %1$s naudotis supervartotojo teisėmis?</string>
<string name="toast">Išmesti</string>
<string name="none">Nėra</string>
<string name="auth_fail">Patvirtinimas žlugo</string>
<!--Superuser logs-->
<string name="target_uid">Target UID: %1$d</string>
<string name="command">Komanda: %1$s</string>
</resources>

View File

@@ -1,216 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Moduler</string>
<string name="downloads">Nedlastinger</string>
<string name="superuser">Superbruker</string>
<string name="log">Logg</string>
<string name="settings">Innstillinger</string>
<string name="install">Installer</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk er ikke installert.</string>
<string name="checking_for_updates">Ser etter oppdateringer …</string>
<string name="invalid_update_channel">Ugyldig oppdateringskanal</string>
<string name="safetyNet_check_text">Trykk for å begynne SafetyNet-sjekken.</string>
<string name="checking_safetyNet_status">Sjekker SafetyNet-statusen …</string>
<string name="safetyNet_check_success">SafetyNet-sjekken var vellykket</string>
<string name="safetyNet_api_error">SafetyNet-API-feil</string>
<string name="safetyNet_res_invalid">Tilbakemeldingen er ugyldig.</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Avanserte innstillinger</string>
<string name="keep_force_encryption">Preserver tvunget kryptering</string>
<string name="keep_dm_verity">Preserver AVB 2.0/dm-verity</string>
<string name="current_installed">Installert: %1$s</string>
<string name="latest_version">Nyeste: %1$s</string>
<string name="uninstall">Avinstaller</string>
<string name="uninstall_magisk_title">Avinstaller Magisk</string>
<string name="uninstall_magisk_msg">Alle moduler vil bli avskrudd/fjernet. Root vil bli fjernet, og dataene dine blir kanskje kryptert dersom de ikke allerede er det.</string>
<string name="update">Oppdater</string>
<!--Module Fragment-->
<string name="no_info_provided">(Ingen info er oppgitt)</string>
<string name="no_modules_found">Ingen moduler ble funnet</string>
<string name="update_file_created">Modulen vil bli oppdatert ved neste omstart.</string>
<string name="remove_file_created">Modulen vil bli fjernet ved neste omstart.</string>
<string name="remove_file_deleted">Modulen vil bli ikke bli fjernet ved neste omstart.</string>
<string name="disable_file_created">Modulen vil bli skrudd av ved neste omstart.</string>
<string name="disable_file_removed">Modulen vil bli skrudd på ved neste omstart.</string>
<string name="author">Laget av %1$s</string>
<string name="reboot_recovery">Omstart til gjenoppretting</string>
<string name="reboot_bootloader">Omstart til oppstartslaster</string>
<string name="reboot_download">Omstart til nedlasting</string>
<!--Repo Fragment-->
<string name="update_available">Oppdatering tilgjengelig</string>
<string name="installed">Installert</string>
<string name="not_installed">Ikke installert</string>
<string name="updated_on">Oppdatert den: %1$s</string>
<string name="sorting_order">Sorteringsrekkefølge</string>
<string name="sort_by_name">Sorter etter navn</string>
<string name="sort_by_update">Sorter etter seneste oppdatering</string>
<!--Log Fragment-->
<string name="menuSaveLog">Lagre loggboken</string>
<string name="menuReload">Omlast</string>
<string name="menuClearLog">Tøm loggboken nå</string>
<string name="logs_cleared">Loggboken ble vellykket tømt.</string>
<string name="log_is_empty">Loggboken er tom.</string>
<!--About Activity-->
<string name="app_changelog">Endringslogg</string>
<string name="translators">Imre Kristoffer Eilertsen</string>
<string name="app_translators">Oversettere</string>
<!-- System Components, Notifications -->
<string name="update_channel">Magisk-oppdateringer</string>
<string name="progress_channel">Fremgangsnotifikasjoner</string>
<string name="download_complete">Nedlastingen er fullført</string>
<string name="download_file_error">Feil under nedlasting av fil</string>
<string name="magisk_update_title">En Magisk-oppdatering er tilgjengelig!</string>
<string name="manager_update_title">En Magisk Manager-oppdatering er tilgjengelig!</string>
<!--Toasts, Dialogs-->
<string name="close">Lukk</string>
<string name="repo_install_title">Installer %1$s</string>
<string name="repo_install_msg">Vil du installere %1$s nå?</string>
<string name="download">Last ned</string>
<string name="reboot">Omstart</string>
<string name="settings_reboot_toast">Start på nytt for å benytte innstillingene.</string>
<string name="release_notes">Lanseringsnyheter</string>
<string name="repo_cache_cleared">Repomellomlageret ble tømt</string>
<string name="internal_storage">ZIP-filen er lagret i:\n[Internal Storage]%1$s</string>
<string name="manager_download_install">Trykk for å laste ned og installere.</string>
<string name="dtbo_patched_title">DTBO ble patchet!</string>
<string name="dtbo_patched_reboot">Magisk Manager har patchet dtbo.img. Vennligst start på nytt.</string>
<string name="flashing">Flashing</string>
<string name="hide_manager_title">Skjuler Magisk Manager …</string>
<string name="hide_manager_fail_toast">Skjulingen av Magisk Manager mislyktes.</string>
<string name="open_link_failed_toast">Ingen apper som kunne åpne denne lenken ble funnet.</string>
<string name="download_zip_only">Bare last ned ZIPen</string>
<string name="patch_boot_file">Patch oppstartsbildefilen</string>
<string name="direct_install">Direkteinstallasjon (Anbefalt)</string>
<string name="install_inactive_slot">Installer til et inaktivt felt (Etter OTA)</string>
<string name="warning">Advarsel</string>
<string name="install_inactive_slot_msg">Enheten din vil bli TVUNGET til å starte opp på det som for øyeblikket er et inaktivt felt, etter en omstart!\nBare bruk dette alternativet etter at OTA-oppdateringen er ferdig.\nVil du fortsette?</string>
<string name="select_method">Velg metode</string>
<string name="boot_file_patch_msg">Velg oppstartsbildefilen som fulgte med mobilen din, i .img- eller .img.tar-format.</string>
<string name="complete_uninstall">Fullstendig avinstallering</string>
<string name="restore_img">Gjenopprett oppstartsbilde</string>
<string name="restore_img_msg">Gjenoppretter …</string>
<string name="restore_done">Gjenopprettingen er fullført!</string>
<string name="restore_fail">Sikkerhetskopien av mobilens eget oppstartsbilde!</string>
<string name="proprietary_title">Last ned proprietær kode</string>
<string name="proprietary_notice">Magisk Manager bruker FOSSS, og kommer ikke med Googles proprietære SafetyNet-API-kode.\n\nVil du tillate Magisk Manager å laste ned utvidelse (som inneholder GoogleApiClient) for å kjøre SafetyNet-sjekker?</string>
<string name="setup_done">Oppsettet er fullført.</string>
<string name="setup_fail">Oppsettet mislyktes.</string>
<string name="env_fix_title">Krever ekstra oppsett</string>
<string name="env_fix_msg">Enheten din krever ekstra oppsett for at Magisk skal kunne fungere ordentlig. Den vil laste ned Magisk-oppsetts-ZIP-filen, vil du fortsette med det nå?</string>
<string name="setup_title">Ekstra oppsett</string>
<string name="setup_msg">Kjører appmiljøoppsettet …</string>
<string name="downloading_toast">Laster ned %1$s</string>
<string name="no_rw_storage">Denne egenskapen vil ikke fungere uten en tillatelse til å skrive til ekstern lagring.</string>
<!--Settings Activity -->
<string name="settings_general_category">Generelt</string>
<string name="settings_dark_theme_title">Mørkt tema</string>
<string name="settings_dark_theme_summary">Skru på det mørke temaet.</string>
<string name="settings_clear_cache_title">Tøm repomellomlageret</string>
<string name="settings_clear_cache_summary">Tøm den mellomlagrede informasjonen til nettrepoer. Dette tvinger appen til å oppfriskes på nett.</string>
<string name="settings_hide_manager_title">Skjul Magisk Manager</string>
<string name="settings_hide_manager_summary">Pakk inn Magisk Manager på nytt med et tilfeldig pakkenavn.</string>
<string name="settings_restore_manager_title">Gjenopprett Magisk Manager</string>
<string name="settings_restore_manager_summary">Gjenopprett Magisk Manager med den opprinnelige pakken</string>
<string name="language">Språk</string>
<string name="system_default">(Systemets standard)</string>
<string name="settings_update">Oppdateringsinnstillinger</string>
<string name="settings_check_update_title">Let etter oppdateringer</string>
<string name="settings_check_update_summary">Let jevnlig etter oppdateringer i bakgrunnen.</string>
<string name="settings_update_channel_title">Oppdateringskanal</string>
<string name="settings_update_stable">Stabil</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Tilpasset</string>
<string name="settings_update_custom_msg">Skriv inn en egendefinert URL</string>
<string name="settings_boot_format_title">Den utdata-patchede oppstartsfilens format</string>
<string name="settings_boot_format_summary">Velg formatet til den utdata-patchede oppstartsfilen.\nVelg .img for å flashe gjennom fastboot-/nedlastingsmodus; velg .img.tar for å flashe gjennom ODIN.</string>
<string name="settings_core_only_title">Kun Magisk-kjernefunksjoner</string>
<string name="settings_core_only_summary">Bare aktiver kjernefunksjonene. MagiskSU og MagiskHide vil fortsatt være skrudd på, men ingen moduler vil bli lastet inn</string>
<string name="settings_magiskhide_summary">Skjul Magisk fra diverse måter å bli oppdaget på.</string>
<string name="settings_hosts_title">Systemløs «hosts»-fil</string>
<string name="settings_hosts_summary">Systemløs «hosts»-filstøtte for reklameblokkeringsapper.</string>
<string name="settings_hosts_toast">La til en modul for systemløs «hosts»-filtilgang</string>
<string name="settings_su_app_adb">Apper og ADB</string>
<string name="settings_su_app">Bare apper</string>
<string name="settings_su_adb">Bare ADB</string>
<string name="settings_su_disable">Skrudd av</string>
<string name="settings_su_request_10">10 sekunder</string>
<string name="settings_su_request_15">15 sekunder</string>
<string name="settings_su_request_20">20 sekunder</string>
<string name="settings_su_request_30">30 sekunder</string>
<string name="settings_su_request_45">45 sekunder</string>
<string name="settings_su_request_60">60 sekunder</string>
<string name="superuser_access">Superbruker-tilgang</string>
<string name="auto_response">Automatisk tilbakemelding</string>
<string name="request_timeout">Tidsgrense for tilbakemelding Timeout</string>
<string name="superuser_notification">Superbruker-notifikasjon</string>
<string name="request_timeout_summary">%1$d sekunder</string>
<string name="settings_su_reauth_title">Autentiser på nytt etter oppdateringer after upgrade</string>
<string name="settings_su_reauth_summary">Autentiser superbruker-tillatelser på nytt etter at en app har blitt oppdatert</string>
<string name="settings_su_fingerprint_title">Skru på fingeravtrykksautentisering</string>
<string name="settings_su_fingerprint_summary">Bruk fingeravtrykksskanneren for å godkjenne superbruker-forespørsler</string>
<string name="auth_fingerprint">Autentiser fingeravtrykk</string>
<string name="multiuser_mode">Flerbrukermoduse</string>
<string name="settings_owner_only">Kun enhetens eier</string>
<string name="settings_owner_manage">Styrt av enhetens eier</string>
<string name="settings_user_independent">Uavhengig av brukere</string>
<string name="owner_only_summary">Bare eieren har root-tilgang.</string>
<string name="owner_manage_summary">Bare eieren kan behandle root-tilgang og motta forespørsler.</string>
<string name="user_indepenent_summary">Hver bruker har hans/hennes egne root-regler.</string>
<string name="mount_namespace_mode">Monterings-navnefeltsmodus</string>
<string name="settings_ns_global">Altdekkende navnefelt</string>
<string name="settings_ns_requester">Arv navnefelt</string>
<string name="settings_ns_isolate">Isolert navnefelt</string>
<string name="global_summary">Alle root-økter benytter det altdekkende monteringsnavnefeltet.</string>
<string name="requester_summary">Root-økter vil arve forespørrerens navnefelt.</string>
<string name="isolate_summary">Hver root-økt vil ha sitt eget isolerte navnefelt.</string>
<string name="android_o_not_support">Støtter ikke Android ≥8.0.</string>
<string name="disable_fingerprint">Ingen fingeravtrykk ble gitt, eller så støttes det ikke av enheten.</string>
<!--Superuser-->
<string name="su_request_title">Superbruker-forespørsel</string>
<string name="deny_with_str">Avslå %1$s</string>
<string name="deny">Avslå</string>
<string name="prompt">Spør</string>
<string name="grant">Tillat</string>
<string name="su_warning">Gir full tilgang til enheten din.\nAvslå det dersom du ikke er sikker!</string>
<string name="forever">For alltid</string>
<string name="once">Én gang</string>
<string name="tenmin">10min</string>
<string name="twentymin">20min</string>
<string name="thirtymin">30min</string>
<string name="sixtymin">60min</string>
<string name="su_allow_toast">%1$s ble tildelt superbruker-rettigheter</string>
<string name="su_deny_toast">%1$s ble nektet superbruker-rettigheter</string>
<string name="no_apps_found">Ingen apper ble funnet</string>
<string name="su_snack_grant">Superbruker-rettigheter for %1$s har blitt tildelt</string>
<string name="su_snack_deny">Superbruker-rettigheter for %1$s har blitt avslått</string>
<string name="su_snack_notif_on">Notifikasjoner for %1$s har blitt skrudd på</string>
<string name="su_snack_notif_off">Notifikasjoner for %1$s har blitt skrudd av</string>
<string name="su_snack_log_on">Loggføring av %1$s er skrudd på</string>
<string name="su_snack_log_off">Loggføring av %1$s er skrudd av</string>
<string name="su_snack_revoke">%1$s rettigheter har blitt opphevet</string>
<string name="su_revoke_title">Vil du oppheve?</string>
<string name="su_revoke_msg">Vil du bekrefte for å oppheve %1$s sine rettigheter?</string>
<string name="toast">Varselfelt</string>
<string name="none">Ingen</string>
<string name="auth_fail">Autentisering mislyktes</string>
<!--Superuser logs-->
<string name="target_uid">Mål-UID: %1$d</string>
<string name="command">Kommando: %1$s</string>
</resources>

View File

@@ -1,200 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Modules</string>
<string name="downloads">Downloads</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Instellingen</string>
<string name="install">Installeren</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk niet geïnstalleerd</string>
<string name="checking_for_updates">Controleren op updates…</string>
<string name="invalid_update_channel">Ongeldig bijwerkkanaal</string>
<string name="safetyNet_check_text">Tik om SafetyNet controle te starten</string>
<string name="checking_safetyNet_status">SafetyNet status controleren…</string>
<string name="safetyNet_check_success">SafetyNet controle succesvol</string>
<string name="safetyNet_api_error">SafetyNet API fout</string>
<string name="safetyNet_res_invalid">Reactie is ongeldig</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Geavanceerde instellingen</string>
<string name="keep_force_encryption">Behoud afgedwongen versleuteling</string>
<string name="keep_dm_verity">Behoud AVB 2.0/dm-verity</string>
<string name="current_installed">Geïnstalleerde: %1$s</string>
<string name="latest_version">Recentste: %1$s</string>
<string name="uninstall">Deïnstalleren</string>
<string name="uninstall_magisk_title">Magisk deïnstalleren</string>
<string name="uninstall_magisk_msg">Alle modules worden uitgeschakeld/verwijderd. Root wordt verwijderd, en je data wordt mogelijk versleuteld als deze dat momenteel niet is</string>
<string name="update">Bijwerken</string>
<!--Module Fragment-->
<string name="no_info_provided">(Geen info verstrekt)</string>
<string name="no_modules_found">Geen modules gevonden</string>
<string name="update_file_created">Module wordt bijgewerkt bij volgende herstart</string>
<string name="remove_file_created">Module wordt verwijderd bij volgende herstart</string>
<string name="remove_file_deleted">Module wordt niet verwijderd bij volgende herstart</string>
<string name="disable_file_created">Module wordt uitgeschakeld bij volgende herstart</string>
<string name="disable_file_removed">Module wordt ingeschakeld bij volgende herstart</string>
<string name="author">Gemaakt door %1$s</string>
<string name="reboot_recovery">Herstart naar Recovery</string>
<string name="reboot_bootloader">Herstart naar Bootloader</string>
<string name="reboot_download">Herstart naar Download</string>
<!--Repo Fragment-->
<string name="update_available">Update beschikbaar</string>
<string name="installed">Geïnstalleerd</string>
<string name="not_installed">Niet geïnstalleerd</string>
<string name="updated_on">Bijgewerkt op: %1$s</string>
<string name="sorting_order">Sorteervolgorde</string>
<string name="sort_by_name">Sorteren op naam</string>
<string name="sort_by_update">Sorteren op laatste update</string>
<!--Log Fragment-->
<string name="menuSaveLog">Opslaan log</string>
<string name="menuReload">Herladen</string>
<string name="menuClearLog">Log nu wissen</string>
<string name="logs_cleared">Log succesvol gewist</string>
<string name="log_is_empty">Log is leeg</string>
<!--About Activity-->
<string name="app_changelog">App\'s changelog</string>
<string name="translators" />
<string name="app_translators">App\'s vertalers</string>
<!--Toasts, Dialogs-->
<string name="close">Sluiten</string>
<string name="repo_install_title">%1$s installeren</string>
<string name="repo_install_msg">Zeker weten %1$s installeren?</string>
<string name="download">Downloaden</string>
<string name="reboot">Herstarten</string>
<string name="magisk_update_title">Nieuwe Magisk update beschikbaar!</string>
<string name="settings_reboot_toast">Herstarten om instellingen toe te passen</string>
<string name="release_notes">Publicatie notities</string>
<string name="repo_cache_cleared">Opslagcache gewist</string>
<string name="internal_storage">De zip is opgeslagen in:\n[Interne opslag]%1$s</string>
<string name="manager_update_title">Nieuwe Magisk Manager update beschikbaar!</string>
<string name="manager_download_install">Tik om te downloaden en installeren</string>
<string name="dtbo_patched_title">DTBO is gepatched!</string>
<string name="dtbo_patched_reboot">Magisk Manager heeft dtbo.img gepatched, herstarten a.u.b.</string>
<string name="update_channel">Magisk updates</string>
<string name="flashing">Flashen</string>
<string name="hide_manager_title">Magisk Manager verbergen…</string>
<string name="hide_manager_fail_toast">Magisk Manager verbergen mislukt…</string>
<string name="download_zip_only">Alleen zip downloaden</string>
<string name="patch_boot_file">Boot image-bestand patchen</string>
<string name="direct_install">Direct installeren (aangeraden)</string>
<string name="select_method">Methode kiezen</string>
<string name="boot_file_patch_msg">Kies originele boot image-dump in .img- of .img.tar-formaat</string>
<string name="complete_uninstall">Compleet deïnstalleren</string>
<string name="restore_img">Images herstellen</string>
<string name="restore_done">Herstel voltooid!</string>
<string name="restore_fail">Originele back-up bestaat niet!</string>
<string name="proprietary_title">Google\'s code downloaden</string>
<string name="proprietary_notice">Magisk Manager is FOSS, dus bevat geen SafetyNet API code van Google.\n\nSta je Magisk Manager toe om een extensie te downloaden (bevat GoogleApiClient) voor SafetyNet controles?</string>
<string name="download_file_error">Fout tijdens downloaden</string>
<string name="downloading_toast">%1$s downloaden</string>
<string name="no_rw_storage">Deze functie werkt niet zonder schrijfpermissie voor externe opslag.</string>
<!--Settings Activity -->
<string name="settings_general_category">Algemeen</string>
<string name="settings_dark_theme_title">Donker thema</string>
<string name="settings_dark_theme_summary">Donker thema inschakelen</string>
<string name="settings_clear_cache_title">Opslagcache wissen</string>
<string name="settings_clear_cache_summary">Wis de gecachte informatie voor online opslagplaatsen. Dit dwingt de app om online te verversen</string>
<string name="settings_hide_manager_title">Magisk Manager verbergen</string>
<string name="settings_hide_manager_summary">Magisk Manager opnieuw inpakken met een willekeurige pakketnaam</string>
<string name="settings_restore_manager_title">Magisk Manager herstellen</string>
<string name="settings_restore_manager_summary">Magisk Manager met oorspronkelijk pakket herstellen</string>
<string name="language">Taal</string>
<string name="system_default">(Systeem standaard)</string>
<string name="settings_update">Instellingen bijwerken</string>
<string name="settings_check_update_title">Updates controleren</string>
<string name="settings_check_update_summary">Periodiek op updates controleren in de achtergrond</string>
<string name="settings_update_channel_title">Update-kanaal</string>
<string name="settings_update_stable">Stabiel</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Aangepast</string>
<string name="settings_update_custom_msg">Aangepaste URL invoeren</string>
<string name="settings_boot_format_title">Gepatchte boot uitvoerformaat</string>
<string name="settings_boot_format_summary">Kies het formaat van de boot image uitvoer.\nKies .img om via fastboot/downloadmodus te flashen; kies .img.tar om via ODIN te flashen.</string>
<string name="settings_core_only_title">Magisk basismodus</string>
<string name="settings_core_only_summary">Alleen kernfuncties inschakelen. Alle modules worden niet geladen. MagiskSU en MagiskHide blijven ingeschakeld</string>
<string name="settings_magiskhide_summary">Magisk van verschillende detecties verbergen</string>
<string name="settings_hosts_title">Systeemloze hosts</string>
<string name="settings_hosts_summary">Systemloze hosts ondersteuning voor Adblock apps</string>
<string name="settings_su_app_adb">Apps en ADB</string>
<string name="settings_su_app">Alleen apps</string>
<string name="settings_su_adb">Alleen ADB</string>
<string name="settings_su_disable">Uitgeschakeld</string>
<string name="settings_su_request_10">10 seconden</string>
<string name="settings_su_request_15">15 seconden</string>
<string name="settings_su_request_20">20 seconden</string>
<string name="settings_su_request_30">30 seconden</string>
<string name="settings_su_request_45">45 seconden</string>
<string name="settings_su_request_60">60 seconden</string>
<string name="superuser_access">Superuser toegang</string>
<string name="auto_response">Automatisch antwoord</string>
<string name="request_timeout">Verzoek time-out</string>
<string name="superuser_notification">Superuser melding</string>
<string name="request_timeout_summary">%1$d seconden</string>
<string name="settings_su_reauth_title">Opnieuw verzoeken na bijwerken</string>
<string name="settings_su_reauth_summary">Superuser rechten opnieuw opvragen na bijwerken applicatie</string>
<string name="settings_su_fingerprint_title">Vingerafdruk authenticatie inschakelen</string>
<string name="settings_su_fingerprint_summary">Vingerafdruk gebruiken om superuser verzoeken toe te staan</string>
<string name="multiuser_mode">Multi-gebruiker modus</string>
<string name="settings_owner_only">Alleen apparaateigenaar</string>
<string name="settings_owner_manage">Beheerd door apparaateigenaar</string>
<string name="settings_user_independent">Gebruiker onafhankelijk</string>
<string name="owner_only_summary">Alleen eigenaar heeft roottoegang</string>
<string name="owner_manage_summary">Alleen eigenaar kan roottoegang beheren en prompt verzoeken ontvangen</string>
<string name="user_indepenent_summary">Iedere gebruiker heeft eigen afzonderlijke rootregels</string>
<string name="mount_namespace_mode">Naamruimte-mount modus</string>
<string name="settings_ns_global">Globale naamruimte</string>
<string name="settings_ns_requester">Verkrijg naamruimte</string>
<string name="settings_ns_isolate">Geïsoleerde naamruimte</string>
<string name="global_summary">Alle rootsessies gebruiken de globale naamruimte</string>
<string name="requester_summary">Rootsessies verkrijgen de verzoeker\'s naamruimte</string>
<string name="isolate_summary">Iedere rootsessie heeft een eigen geïsoleerde naamruimte</string>
<string name="android_o_not_support">Ondersteunt geen Android 8.0+</string>
<string name="disable_fingerprint">Geen vingerafdrukken ingesteld, of geen apparaatondersteuning</string>
<!--Superuser-->
<string name="su_request_title">Superuser verzoek</string>
<string name="deny_with_str">Weigeren %1$s</string>
<string name="deny">Weigeren</string>
<string name="prompt">Prompt</string>
<string name="grant">Toestaan</string>
<string name="su_warning">Verleent volledige toegang tot je apparaat.\nWeigeren als je het niet zeker weet!</string>
<string name="forever">Altijd</string>
<string name="once">Eénmalig</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">Superuser rechten voor %1$s toegestaan</string>
<string name="su_deny_toast">Superuser rechten voor %1$s geweigerd</string>
<string name="no_apps_found">Geen apps gevonden</string>
<string name="su_snack_grant">Superuser rechten van %1$s toegestaan</string>
<string name="su_snack_deny">Superuser rechten van %1$s geweigerd</string>
<string name="su_snack_notif_on">Meldingen van %1$s ingeschakeld</string>
<string name="su_snack_notif_off">Meldingen van %1$s uitgeschakeld</string>
<string name="su_snack_log_on">Loggen van %1$s ingeschakeld</string>
<string name="su_snack_log_off">Loggen of %1$s uitgeschakeld</string>
<string name="su_snack_revoke">%1$s rechten zijn ingetrokken</string>
<string name="su_revoke_title">Intrekken?</string>
<string name="su_revoke_msg">De rechten van %1$s intrekken?</string>
<string name="toast">Toast</string>
<string name="none">Geen</string>
<string name="auth_fail">Authenticatie mislukt</string>
<!--Superuser logs-->
<string name="target_uid">Doel UID: %1$d</string>
<string name="command">Opdracht: %1$s</string>
</resources>

View File

@@ -1,216 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Moduły</string>
<string name="downloads">Pobieranie</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Ustawienia</string>
<string name="install">Instalacja</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk nie jest zainstalowany</string>
<string name="checking_for_updates">Sprawdzanie aktualizacji…</string>
<string name="invalid_update_channel">Nieprawidłowy Kanał Aktualizacji</string>
<string name="safetyNet_check_text">Dotknij aby sprawdzić SafetyNet</string>
<string name="checking_safetyNet_status">Sprawdzanie statusu SafetyNet…</string>
<string name="safetyNet_check_success">SafetyNet Poprawny</string>
<string name="safetyNet_api_error">SafetyNet Błędny</string>
<string name="safetyNet_res_invalid">Usługa nie odpowiada</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Zaawansowane Ustawienia</string>
<string name="keep_force_encryption">Zachowaj force encryption</string>
<string name="keep_dm_verity">Zachowaj AVB 2.0/dm-verity</string>
<string name="current_installed">Zainstalowana: %1$s</string>
<string name="latest_version">Ostatnia: %1$s</string>
<string name="uninstall">Odinstaluj</string>
<string name="uninstall_magisk_title">Odinstaluj Magisk</string>
<string name="uninstall_magisk_msg">Wszystkie moduły będą wyłączone/usunięte. Root zostanie usunięty i przywrócone szyfrowanie danych, jeśli nie są te dane obecnie szyfrowane</string>
<string name="update">Aktualizacja</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nie umieszczono informacji)</string>
<string name="no_modules_found">Nie znaleziono modułów</string>
<string name="update_file_created">Moduł zostanie zaktualizowany przy następnym restarcie</string>
<string name="remove_file_created">Moduł zostanie usunięty przy następnym uruchomieniu</string>
<string name="remove_file_deleted">Moduł nie zostanie usunięty podczas następnego restartu</string>
<string name="disable_file_created">Moduł zostanie wyłączony przy następnym restarcie</string>
<string name="disable_file_removed">Moduł zostanie włączony przy następnym restarcie</string>
<string name="author">Autor: %1$s</string>
<string name="reboot_recovery">Restart do Recovery</string>
<string name="reboot_bootloader">Restart do Bootloadera</string>
<string name="reboot_download">Restart do Download</string>
<!--Repo Fragment-->
<string name="update_available">Aktualizacja jest dostępna</string>
<string name="installed">Zainstalowany</string>
<string name="not_installed">Nie zainstalowany</string>
<string name="updated_on">Zaktualizowano: %1$s</string>
<string name="sorting_order">Kolejność Sortowania</string>
<string name="sort_by_name">Sortuj po nazwie</string>
<string name="sort_by_update">Sortuj po ostatniej aktualizacji</string>
<!--Log Fragment-->
<string name="menuSaveLog">Zapisz log</string>
<string name="menuReload">Załaduj ponownie</string>
<string name="menuClearLog">Wyczyść Log</string>
<string name="logs_cleared">Log wyczyszczony</string>
<string name="log_is_empty">Log jest pusty</string>
<!--About Activity-->
<string name="app_changelog">Zmiany w Aplikacji</string>
<string name="translators" />
<string name="app_translators">Tłumacze Aplikacji</string>
<!-- System Components, Notifications -->
<string name="update_channel">Aktualizacja Magisk</string>
<string name="progress_channel">Powiadomienia o Postępie</string>
<string name="download_complete">Pobieranie zakończone</string>
<string name="download_file_error">Błąd pobierania pliku</string>
<string name="magisk_update_title">Nowa Wersja Magisk Dostępna!</string>
<string name="manager_update_title">Nowa Wersja Magisk Manager Jest Dostępna!</string>
<!--Toasts, Dialogs-->
<string name="close">Zamknij</string>
<string name="repo_install_title">Zainstaluj %1$s</string>
<string name="repo_install_msg">Czy chcesz zainstalować %1$s ?</string>
<string name="download">Pobierz</string>
<string name="reboot">Restart</string>
<string name="settings_reboot_toast">Uruchom ponownie, aby zastosować ustawienia</string>
<string name="release_notes">Zmiany</string>
<string name="repo_cache_cleared">Cache repozytorium wyczyszczone</string>
<string name="internal_storage">Zip jest przechowywany w:\n[Pamięć Wewnętrzna]%1$s</string>
<string name="manager_download_install">Naciśnij aby pobrać i zainstalować</string>
<string name="dtbo_patched_title">DTBO został wgrany!</string>
<string name="dtbo_patched_reboot">Magisk Manager wgrał dtbo.img, uruchom ponownie</string>
<string name="flashing">Flashowanie</string>
<string name="hide_manager_title">Ukryj Magisk Manager…</string>
<string name="hide_manager_fail_toast">Błąd Ukrycia Magisk Managera</string>
<string name="open_link_failed_toast">Nie znaleziono aplikacji pod linkiem.</string>
<string name="download_zip_only">Pobierz Tylko Zip</string>
<string name="patch_boot_file">Patchowanie Pliku Boot Image</string>
<string name="direct_install">Bezpośrednia instalacja (Zalecane)</string>
<string name="install_inactive_slot">Zainstaluj do nieaktywnego Slotu (po OTA)</string>
<string name="warning">Uwaga</string>
<string name="install_inactive_slot_msg">Urządzenie będzie MUSIAŁO uruchomić się z bieżącego nieaktywnego slotu po restarcie! /\nUżyj tylko tej opcji po zakończeniu OTA.\nKontynuować?</string>
<string name="select_method">Wybierz Metodę</string>
<string name="boot_file_patch_msg">Wybierz stock boot image w formacie .img lub .img.tar</string>
<string name="complete_uninstall">Odinstalowywanie Zakończone</string>
<string name="restore_img">Przywróć Obraz</string>
<string name="restore_img_msg">Przywracanie…</string>
<string name="restore_done">Przywracanie zakończone!</string>
<string name="restore_fail">Stock backup nie istnieje!</string>
<string name="proprietary_title">Pobierz Kod</string>
<string name="proprietary_notice">Magisk Manager to FOSS, więc nie zawiera zastrzeżonego kodu API SafetyNet. \n\nCzy zezwolić Magisk Managerowi na pobranie rozszerzenia (zawierającego GoogleApiClient) do sprawdzenia SafetyNet?</string>
<string name="setup_done">Konfiguracja gotowa</string>
<string name="setup_fail">Konfiguracja nieudana</string>
<string name="env_fix_title">Wymaga Dodatkowej Konfiguracji</string>
<string name="env_fix_msg">Twoje urządzenie potrzebuje dodatkowej konfiguracji, aby Magisk działał prawidłowo. Spowoduje to pobranie pliku instalacyjnego Magisk, czy chcesz kontynuować?</string>
<string name="setup_title">Dodatkowa konfiguracja</string>
<string name="setup_msg">Uruchamianie konfiguracji środowiska…</string>
<string name="downloading_toast">Pobieranie %1$s</string>
<string name="no_rw_storage">Ta funkcja nie będzie działać bez uprawnień do zapisu na pamięci zewnętrznej.</string>
<!--Settings Activity -->
<string name="settings_general_category">Ogólne</string>
<string name="settings_dark_theme_title">Ciemny Motyw</string>
<string name="settings_dark_theme_summary">Włącz ciemny motyw</string>
<string name="settings_clear_cache_title">Wyczyść Pamięć Repozytorium</string>
<string name="settings_clear_cache_summary">Wymusza na aplikacji odświeżenie online repozytorium</string>
<string name="settings_hide_manager_title">Ukryj Magisk Manager</string>
<string name="settings_hide_manager_summary">Przepakowanie Magisk Manager z losową nazwą pakietu</string>
<string name="settings_restore_manager_title">Przywróć Magisk Manager</string>
<string name="settings_restore_manager_summary">Przywróć oryginalną paczkę Magisk Manager</string>
<string name="language">Język</string>
<string name="system_default">(Domyślny Systemu)</string>
<string name="settings_update">Ustawienia Aktualizacji</string>
<string name="settings_check_update_title">Sprawdź Aktualizację</string>
<string name="settings_check_update_summary">Regularnie sprawdzaj aktualizacje w tle</string>
<string name="settings_update_channel_title">Kanał Aktualizacji</string>
<string name="settings_update_stable">Stabilny</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Własny</string>
<string name="settings_update_custom_msg">Wstaw własny URL</string>
<string name="settings_boot_format_title">Poprawny format pliku rozruchowego</string>
<string name="settings_boot_format_summary">Wybierz format pliku boot image.\nWybierz .img dla wgrywania poprzez Fastboot/Download Mode. Wybierz .img.tar dla ODINA.</string>
<string name="settings_core_only_title">Tylko Podstawowy Tryb Magisk</string>
<string name="settings_core_only_summary">Włącz tylko podstawowe funkcje, wszystkie moduły nie zostaną załadowane. MagiskSU i MagiskHide nadal będą włączone</string>
<string name="settings_magiskhide_summary">Włącz Magisk Hide dla wykrytych aplikacji</string>
<string name="settings_hosts_title">Włącz systemless hosts</string>
<string name="settings_hosts_summary">Wsparcie systemless dla aplikacji Adblock</string>
<string name="settings_hosts_toast">Dodano systemowy host moduł</string>
<string name="settings_su_app_adb">Aplikacje i ADB</string>
<string name="settings_su_app">Tylko Aplikacje</string>
<string name="settings_su_adb">Tylko ADB</string>
<string name="settings_su_disable">Wyłączone</string>
<string name="settings_su_request_10">10 sekund</string>
<string name="settings_su_request_15">15 sekund</string>
<string name="settings_su_request_20">20 sekund</string>
<string name="settings_su_request_30">30 sekund</string>
<string name="settings_su_request_45">45 sekund</string>
<string name="settings_su_request_60">60 sekund</string>
<string name="superuser_access">Dostęp Superuser</string>
<string name="auto_response">Automatyczna Odpowiedź</string>
<string name="request_timeout">Czas na decyzję</string>
<string name="superuser_notification">Powiadomienia Superusera</string>
<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_fingerprint_title">Włącz Uwierzytelnienie Odciskiem Palca</string>
<string name="settings_su_fingerprint_summary">Użyj skanera linii papilarnych, aby zezwolić na żądania supersu</string>
<string name="auth_fingerprint">Uwierzytelnianie Odciskiem Palców</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>
<string name="settings_user_independent">Niezależny Użytkownik</string>
<string name="owner_only_summary">Tylko właściciel ma dostęp do roota</string>
<string name="owner_manage_summary">Tylko właściciel może zarządzać prawami dostępu użytkownika do roota iwyświetlać żądania dostępu</string>
<string name="user_indepenent_summary">Każdy użytkownik ma swoje własne odrębne ustawienia dostępu</string>
<string name="mount_namespace_mode">Montuj Tryb Odstępu Nazw</string>
<string name="settings_ns_global">Globalna Nazwa</string>
<string name="settings_ns_requester">Dziedziczenie Nazw</string>
<string name="settings_ns_isolate">Izolacja Nazw</string>
<string name="global_summary">Wszystkie sesje root za pomocą globalnej przestrzeni montowań nazw</string>
<string name="requester_summary">Sesje Root będzie dziedziczyć prośby i nazwy</string>
<string name="isolate_summary">W każdej sesji root będzie miał własną odosobnioną nazwę</string>
<string name="android_o_not_support">Brak wsparcia dla Androida 8.0+</string>
<string name="disable_fingerprint">Nie ustawiono żadnych odcisków palców lub brak obsługi urządzenia</string>
<!--Superuser-->
<string name="su_request_title">Prośba o dostęp Superusera</string>
<string name="deny_with_str">Odmów%1$s</string>
<string name="deny">Odmów</string>
<string name="prompt">Zapytaj</string>
<string name="grant">Przyznaj</string>
<string name="su_warning">Udziela pełnego dostępu do urządzenia.\nOdmów jeśli nie jesteś pewien!</string>
<string name="forever">Zawsze</string>
<string name="once">Raz</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s ma przyznane uprawnienia Superusera</string>
<string name="su_deny_toast">%1$s ma odmówione uprawnienia Superusera</string>
<string name="no_apps_found">Nie znaleziono aplikacji</string>
<string name="su_snack_grant">Przyznano uprawnienia Superuser dla %1$s</string>
<string name="su_snack_deny">Odmówiono uprawnień Superuser dla %1$s</string>
<string name="su_snack_notif_on">Powiadomienia dla %1$s są włączone</string>
<string name="su_snack_notif_off">Powiadomienia dla %1$s są wyłączone</string>
<string name="su_snack_log_on">Logowanie dla %1$s jest włączone</string>
<string name="su_snack_log_off">Logowanie dla %1$s jest wyłączone</string>
<string name="su_snack_revoke">%1$s uprawnienia są odwołane</string>
<string name="su_revoke_title">Odwołać?</string>
<string name="su_revoke_msg">Potwierdzasz odwołanie uprawnień %1$s?</string>
<string name="toast">Powiadomienie</string>
<string name="none">Brak</string>
<string name="auth_fail">Uwierzytelnienie Nieudane</string>
<!--Superuser logs-->
<string name="target_uid">Identyfikator UID: %1$d</string>
<string name="command">Komenda: %1$s</string>
</resources>

View File

@@ -1,201 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Módulos</string>
<string name="downloads">Downloads</string>
<string name="superuser">Superusuário</string>
<string name="log">Registro</string>
<string name="settings">Configurações</string>
<string name="install">Instalar</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk não está instalado</string>
<string name="checking_for_updates">Verificando por atualizações…</string>
<string name="invalid_update_channel">Canal de Atualização Inválido</string>
<string name="safetyNet_check_text">Verificar SafetyNet</string>
<string name="checking_safetyNet_status">Verificando status de SafetyNet…</string>
<string name="safetyNet_check_success">SafetyNet Verificado Com Sucesso</string>
<string name="safetyNet_api_error">Erro de SafetyNet API</string>
<string name="safetyNet_res_invalid">A resposta é inválida</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Configurações Avançadas</string>
<string name="keep_force_encryption">Preservar criptografia forçada</string>
<string name="keep_dm_verity">Preservar AVB 2.0/dm-verity</string>
<string name="current_installed">Instalada: %1$s</string>
<string name="latest_version">Última: %1$s</string>
<string name="uninstall">Desinstalar</string>
<string name="uninstall_magisk_title">Desinstalar Magisk</string>
<string name="uninstall_magisk_msg">Todos os módulos serão desativados/removidos. O root será removido, e potencialmente criptografará seus dados se seus dados não estiverem atualmente criptografados</string>
<string name="update">Atualizar</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nenhuma informação fornecida)</string>
<string name="no_modules_found">Nenhum módulo encontrado</string>
<string name="update_file_created">O módulo será atualizado na próxima reinicialização</string>
<string name="remove_file_created">O módulo será removido na próxima reinicialização</string>
<string name="remove_file_deleted">O módulo não será removido na próxima reinicialização</string>
<string name="disable_file_created">O módulo será desativado na próxima reinicialização</string>
<string name="disable_file_removed">O módulo será ativado na próxima reinicialização</string>
<string name="author">Criado por %1$s</string>
<string name="reboot_recovery">Reiniciar em Recuperação</string>
<string name="reboot_bootloader">Reiniciar em Bootloader</string>
<string name="reboot_download">Reiniciar em Download</string>
<!--Repo Fragment-->
<string name="update_available">Atualização Disponível</string>
<string name="installed">Instalado</string>
<string name="not_installed">Não Instalado</string>
<string name="updated_on">Atualizado em: %1$s</string>
<string name="sorting_order">Ordenar</string>
<string name="sort_by_name">Ordenar por nome</string>
<string name="sort_by_update">Ordenar por última atualização</string>
<!--Log Fragment-->
<string name="menuSaveLog">Salvar registro</string>
<string name="menuReload">Recarregar</string>
<string name="menuClearLog">Limpar registro agora</string>
<string name="logs_cleared">Registro limpo com sucesso</string>
<string name="log_is_empty">Registro vazio</string>
<!--About Activity-->
<string name="app_changelog">Registro de mudanças</string>
<string name="translators" />
<string name="app_translators">Tradutores</string>
<!--Toasts, Dialogs-->
<string name="close">Fechar</string>
<string name="repo_install_title">Instalar %1$s</string>
<string name="repo_install_msg">Instalar %1$s agora?</string>
<string name="download">Baixar</string>
<string name="reboot">Reiniciar</string>
<string name="magisk_update_title">Nova Atualização do Magisk Disponível!</string>
<string name="settings_reboot_toast">Reinicie para aplicar as configurações</string>
<string name="release_notes">Notas de lançamento</string>
<string name="repo_cache_cleared">Cache de repositório limpo</string>
<string name="internal_storage">O zip está armazenado em:\n[Armazenamento Interno]%1$s</string>
<string name="manager_update_title">Nova Atualização do Magisk Manager Disponível!</string>
<string name="manager_download_install">Toque para baixar e instalar</string>
<string name="dtbo_patched_title">DTBO foi emendado!</string>
<string name="dtbo_patched_reboot">Magisk Manager emendou dtbo.img, reinicie</string>
<string name="update_channel">Atualizações do Magisk</string>
<string name="flashing">Gravando</string>
<string name="hide_manager_title">Ocultando Magisk Manager…</string>
<string name="hide_manager_fail_toast">Falha ao ocultar Magisk Manager…</string>
<string name="download_zip_only">Baixar Zip Apenas</string>
<string name="patch_boot_file">Emendar Arquivo de Imagem de Inicialização</string>
<string name="direct_install">Instalação Direta (Recomendado)</string>
<string name="install_inactive_slot">Instalar no Slot Inativo (Após OTA)</string>
<string name="select_method">Selecionar Método</string>
<string name="boot_file_patch_msg">Selecionar depósito de imagem de inicialização de fábrica no formato .img ou .img.tar</string>
<string name="complete_uninstall">Completar Desinstalação</string>
<string name="restore_img">Restaurar Imagens</string>
<string name="restore_done">Restauração concluída!</string>
<string name="restore_fail">Backup original não existe!</string>
<string name="proprietary_title">Baixar Código Proprietário</string>
<string name="proprietary_notice">Magisk Manager é FOSS, que não contém o código proprietário da API SafetyNet da Google.\n\nPermitir ao Magisk Manager baixar uma extensão (que contém a GoogleApiClient) para a verificação SafetyNet?</string>
<string name="download_file_error">Erro ao baixar arquivo</string>
<string name="downloading_toast">Baixando %1$s</string>
<string name="no_rw_storage">Este recurso não funcionará sem permissão para gravar no armazenamento externo.</string>
<!--Settings Activity -->
<string name="settings_general_category">Geral</string>
<string name="settings_dark_theme_title">Tema Escuro</string>
<string name="settings_dark_theme_summary">Ativar tema escuro</string>
<string name="settings_clear_cache_title">Limpar Cache de Repositório</string>
<string name="settings_clear_cache_summary">Limpar as informações no cache para repositórios onlines, força o app a reatualizar online</string>
<string name="settings_hide_manager_title">Ocultar Magisk Manager</string>
<string name="settings_hide_manager_summary">Reempacotar Magisk Manager com nome de pacote aleatório</string>
<string name="settings_restore_manager_title">Restaurar Magisk Manager</string>
<string name="settings_restore_manager_summary">Restaurar Magisk Manager com pacote original</string>
<string name="language">Idioma</string>
<string name="system_default">(Padrão do Sistema)</string>
<string name="settings_update">Configurações de Atualizações</string>
<string name="settings_check_update_title">Verificar Atualizações</string>
<string name="settings_check_update_summary">Verificar atualizações em segundo plano periodicamente</string>
<string name="settings_update_channel_title">Canal de Atualização</string>
<string name="settings_update_stable">Estável</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalizado</string>
<string name="settings_update_custom_msg">Inserir uma URL personalizada</string>
<string name="settings_boot_format_title">Formato de Saída de Inicialização Emendada</string>
<string name="settings_boot_format_summary">Selecionar formato de saída de imagem de inicialização emendada.\nEscolha .img para gravar através do modo fastboot/download; escolha .img.tar para gravar com ODIN.</string>
<string name="settings_core_only_title">Modo Magisk de Núcleo Apenas</string>
<string name="settings_core_only_summary">Ativar apenas recursos de núcleo. MagiskSU e MagiskHide ainda serão ativados, mas nenhum módulo será carregado.</string>
<string name="settings_magiskhide_summary">Ocultar Magisk de várias detecções</string>
<string name="settings_hosts_title">Hosts sem sistema</string>
<string name="settings_hosts_summary">Suporte de hosts sem sistema para apps de Adblock</string>
<string name="settings_su_app_adb">Apps e ADB</string>
<string name="settings_su_app">Apps apenas</string>
<string name="settings_su_adb">ADB apenas</string>
<string name="settings_su_disable">Desativado</string>
<string name="settings_su_request_10">10 segundos</string>
<string name="settings_su_request_15">15 segundos</string>
<string name="settings_su_request_20">20 segundos</string>
<string name="settings_su_request_30">30 segundos</string>
<string name="settings_su_request_45">45 segundos</string>
<string name="settings_su_request_60">60 segundos</string>
<string name="superuser_access">Acesso de Superusuário</string>
<string name="auto_response">Resposta Automática</string>
<string name="request_timeout">Tempo Limite de Solicitação</string>
<string name="superuser_notification">Notificação de Superusuário</string>
<string name="request_timeout_summary">%1$d segundos</string>
<string name="settings_su_reauth_title">Reautenticar após atualizar</string>
<string name="settings_su_reauth_summary">Reautenticar permissões de superusuário após um app atualizar</string>
<string name="settings_su_fingerprint_title">Ativar Autenticação de Impressão Digital</string>
<string name="settings_su_fingerprint_summary">Usar escaneador de impressão digital para permitir solicitações de superusuário</string>
<string name="multiuser_mode">Modo de Multiusuário</string>
<string name="settings_owner_only">Proprietário do Dispositivo Apenas</string>
<string name="settings_owner_manage">Proprietário do Dispositivo Gerenciado</string>
<string name="settings_user_independent">Usuário Independente</string>
<string name="owner_only_summary">Apenas proprietário tem acesso root</string>
<string name="owner_manage_summary">Apenas proprietário pode gerenciar acesso root e receber expedições de solicitações</string>
<string name="user_indepenent_summary">Cada usuário tem suas próprias regras root separadas</string>
<string name="mount_namespace_mode">Montar Modo de Espaço de Nome</string>
<string name="settings_ns_global">Espaço de Nome Global</string>
<string name="settings_ns_requester">Espaço de Nome Herdado</string>
<string name="settings_ns_isolate">Espaço de Nome Isolado</string>
<string name="global_summary">Todas as sessões root usam montagem de espaço de nome global</string>
<string name="requester_summary">As sessões root herdarão espaço de nome de seu solicitante</string>
<string name="isolate_summary">Cada sessão root terá seu próprio espaço de nome isolado</string>
<string name="android_o_not_support">Não suporta Android 8.0+</string>
<string name="disable_fingerprint">Nenhuma impressão digital foi definida ou dispostivo sem suporte</string>
<!--Superuser-->
<string name="su_request_title">Solicitação de Superusuário</string>
<string name="deny_with_str">Negar%1$s</string>
<string name="deny">Negar</string>
<string name="prompt">Solicitar</string>
<string name="grant">Conceder</string>
<string name="su_warning">Concede acesso total ao seu dispositivo.\nNegue se você não tem certeza!</string>
<string name="forever">Sempre</string>
<string name="once">Uma Vez</string>
<string name="tenmin">10 mins</string>
<string name="twentymin">20 mins</string>
<string name="thirtymin">30 mins</string>
<string name="sixtymin">60 mins</string>
<string name="su_allow_toast">%1$s teve concedido direitos de Superusuário</string>
<string name="su_deny_toast">%1$s teve negado direitos de Superusuário</string>
<string name="no_apps_found">Nenhum app encontrado</string>
<string name="su_snack_grant">Direitos de Superusuário de %1$s estão concedidos</string>
<string name="su_snack_deny">Direitos de Superusuário de %1$s estão negados</string>
<string name="su_snack_notif_on">Notificações de %1$s estão ativadas</string>
<string name="su_snack_notif_off">Notificações de %1$s estão desativadas</string>
<string name="su_snack_log_on">Registração de %1$s está ativada</string>
<string name="su_snack_log_off">Registração de %1$s está desativada</string>
<string name="su_snack_revoke">Direitos de %1$s estão revogados</string>
<string name="su_revoke_title">Revogar?</string>
<string name="su_revoke_msg">Revogar os direitos de %1$s?</string>
<string name="toast">Torrada</string>
<string name="none">Nenhuma</string>
<string name="auth_fail">Falha de Autenticação</string>
<!--Superuser logs-->
<string name="target_uid">Alvo UID: %1$d</string>
<string name="command">Comando: %1$s</string>
</resources>

View File

@@ -1,169 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Módulos</string>
<string name="downloads">Transferir</string>
<string name="superuser">root</string>
<string name="log">Registo</string>
<string name="settings">Definições</string>
<string name="install">Instalar</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk não instalado</string>
<string name="checking_for_updates">A procurar por atualizações…</string>
<string name="safetyNet_check_text">Pressione para verificar SafetyNet</string>
<string name="checking_safetyNet_status">A verificar o estado do SafetyNet…</string>
<string name="safetyNet_check_success">SafetyNet verificado com sucesso</string>
<string name="safetyNet_api_error">Erro na API SafetyNet</string>
<string name="safetyNet_res_invalid">A resposta é inválida</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Definições avançadas</string>
<string name="keep_force_encryption">Manter encriptação forçada</string>
<string name="keep_dm_verity">Manter AVB 2.0/dm-verity</string>
<string name="current_installed">Instalada: %1$s</string>
<string name="latest_version">Última: %1$s</string>
<string name="uninstall">Desinstalar</string>
<string name="uninstall_magisk_title">Desinstalar Magisk</string>
<string name="update">Atualizar</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nenhuma informação fornecida)</string>
<string name="no_modules_found">Nenhum módulo encontrado</string>
<string name="update_file_created">Módulo será atualizado depois de reiniciar</string>
<string name="remove_file_created">Módulo será removido depois de reiniciar</string>
<string name="remove_file_deleted">Módulo não será removido ao reiniciar</string>
<string name="disable_file_created">Módulo será desativado depois de reiniciar</string>
<string name="disable_file_removed">Módulo será ativado depois de reiniciar</string>
<string name="author">Criado por %1$s</string>
<!--Repo Fragment-->
<string name="update_available">Atualização disponível</string>
<string name="installed">Instalado</string>
<string name="not_installed">Não Instalado</string>
<!--Log Fragment-->
<string name="menuSaveLog">Gravar registo</string>
<string name="menuReload">Recarregar</string>
<string name="menuClearLog">Limpar registo agora</string>
<string name="logs_cleared">Registo limpo com sucesso</string>
<string name="log_is_empty">Registo está vazio</string>
<!--About Activity-->
<string name="app_changelog">Lista de alterações da aplicação</string>
<string name="app_translators">Tradutores da Aplicação</string>
<!--Toasts, Dialogs-->
<string name="close">Fechar</string>
<string name="repo_install_title">Instalar %1$s</string>
<string name="repo_install_msg">Deseja instalar%1$s agora?</string>
<string name="download">Transferir</string>
<string name="reboot">Reiniciar</string>
<string name="magisk_update_title">Nova atualização do Magisk disponível!</string>
<string name="settings_reboot_toast">Reinicie para aplicar definições</string>
<string name="release_notes">Notas da atualização</string>
<string name="repo_cache_cleared">Cache do repositório apagado</string>
<string name="internal_storage">O zip foi guardado em:
\n[Armazenamento interno]%1$s</string>
<string name="manager_update_title">Nova atualização do Magisk Manager disponível!</string>
<string name="manager_download_install">Pressione para transferir e instalar</string>
<string name="update_channel">Atualizações do Magisk</string>
<string name="flashing">A instalar</string>
<string name="hide_manager_title">A esconder Magisk Manager…</string>
<string name="hide_manager_fail_toast">Falha ao esconder Magisk Manager…</string>
<string name="download_zip_only">Transferir Apenas Ficheiro Zip</string>
<string name="patch_boot_file">Patch a Imagem de Arranque</string>
<string name="direct_install">Instalar Diretamente (Recomendado)</string>
<string name="select_method">Selecionar Método</string>
<string name="complete_uninstall">Desinstalação Completa</string>
<string name="restore_done">Restauração feita!</string>
<string name="download_file_error">Erro ao transferir ficheiro</string>
<string name="downloading_toast">A transferir %1$s</string>
<string name="no_rw_storage">Esta funcionalidade não funcionará sem permissão de escrita do armazenamento externo.</string>
<!--Settings Activity -->
<string name="settings_general_category">Geral</string>
<string name="settings_dark_theme_title">Tema escuro</string>
<string name="settings_dark_theme_summary">Ativa o tema escuro</string>
<string name="settings_clear_cache_title">Apagar Cache de Repositório</string>
<string name="settings_clear_cache_summary">Apaga a informação cache de repositórios online. online, forçando a aplicação a atualizar online</string>
<string name="settings_hide_manager_title">Esconder Magisk Manager</string>
<string name="language">Língua</string>
<string name="system_default">(Padrão do Sistema)</string>
<string name="settings_update_stable">Estável</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_core_only_title">Magisk somente em Modo Core</string>
<string name="settings_core_only_summary">Ativar somente funcionalidades principais, todos os módulos não serão carregados. MagiskSU e MagiskHide ainda estará ativado</string>
<string name="settings_magiskhide_summary">Oculta Magisk de várias deteções</string>
<string name="settings_hosts_title">Ativar systemless hosts</string>
<string name="settings_hosts_summary">Suporte de systemless para aplicações Adblock</string>
<string name="settings_su_app_adb">Aplicações e ADB</string>
<string name="settings_su_app">Somente Aplicações</string>
<string name="settings_su_adb">Somente ADB</string>
<string name="settings_su_disable">Desativado</string>
<string name="settings_su_request_10">10 segundos</string>
<string name="settings_su_request_15">15 segundos</string>
<string name="settings_su_request_20">20 segundos</string>
<string name="settings_su_request_30">30 segundos</string>
<string name="settings_su_request_45">45 segundos</string>
<string name="settings_su_request_60">60 segundos</string>
<string name="superuser_access">Acesso de root</string>
<string name="auto_response">Resposta Automática</string>
<string name="request_timeout">Tempo limite de solicitação</string>
<string name="superuser_notification">Notificação de root</string>
<string name="request_timeout_summary">%1$d segundos</string>
<string name="settings_su_reauth_title">Autenticar novamente após atualizar</string>
<string name="settings_su_reauth_summary">Autenticar novamente permissões de root após atualizar aplicações</string>
<string name="multiuser_mode">Modo Multi-Utilizador</string>
<string name="settings_owner_only">Apenas Proprietário de Dispositivo</string>
<string name="settings_owner_manage">Gerido Proprietário do Dispositivo</string>
<string name="settings_user_independent">Independente de Utilizadores</string>
<string name="owner_only_summary">Apenas o proprietário tem acesso a root</string>
<string name="owner_manage_summary">Apenas o proprietário pode gerir acesso root e receber pedidos</string>
<string name="user_indepenent_summary">Cada utilizador tem suas próprias regras de root separadas</string>
<string name="mount_namespace_mode">Cada sessão root terá sua própria identificação isolada</string>
<string name="settings_ns_global">Identificação Global</string>
<string name="settings_ns_requester">Herdar Identificação</string>
<string name="settings_ns_isolate">Identificação Isolada</string>
<string name="global_summary">Todas as sessões root usam a identificação de montagem global</string>
<string name="requester_summary">As sessões de root herdarão a identificação do seu solicitante</string>
<string name="isolate_summary">Cada sessão root terá sua própria identificação isolada</string>
<!--Superuser-->
<string name="su_request_title">Pedido de root</string>
<string name="deny_with_str">Negar%1$s</string>
<string name="deny">Negar</string>
<string name="prompt">Perguntar</string>
<string name="grant">Permitir</string>
<string name="su_warning">Concede acesso total ao seu dispositivo.
\nNegue se não tiver certeza!</string>
<string name="forever">Sempre</string>
<string name="once">Uma vez</string>
<string name="tenmin">10 minutos</string>
<string name="twentymin">20 minutos</string>
<string name="thirtymin">30 minutos</string>
<string name="sixtymin">60 minutos</string>
<string name="su_allow_toast">%1$s foi permitido o acesso de root</string>
<string name="su_deny_toast">%1$s foi negado o acesso de root</string>
<string name="no_apps_found">Não foram encontrados aplicações</string>
<string name="su_snack_grant">Acesso de root a %1$s foi permitido</string>
<string name="su_snack_deny">Acesso de root a %1$s foi negado</string>
<string name="su_snack_notif_on">Notificações de %1$s está ativado</string>
<string name="su_snack_notif_off">Notificações da %1$s está desativado</string>
<string name="su_snack_log_on">Registo de %1$s está ativado</string>
<string name="su_snack_log_off">Registo de %1$s está desativado</string>
<string name="su_snack_revoke">%1$s direitos foram revogados</string>
<string name="su_revoke_title">Revogar?</string>
<string name="su_revoke_msg">Revogar os diretos do %1$s, Confirmar?</string>
<string name="toast">Notificação(pop-up)</string>
<string name="none">Nenhum</string>
<!--Superuser logs-->
<string name="target_uid">Alvo UID: %1$d</string>
<string name="command">Comando: %1$s</string>
</resources>

View File

@@ -1,216 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Module</string>
<string name="downloads">Descărcări</string>
<string name="superuser">Superuser</string>
<string name="log">Jurnal</string>
<string name="settings">Setări</string>
<string name="install">Instalare</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk nu este instalat</string>
<string name="checking_for_updates">Verificare actualizări…</string>
<string name="invalid_update_channel">Canal de actualizare nevalid</string>
<string name="safetyNet_check_text">Verificare SafetyNet</string>
<string name="checking_safetyNet_status">Verificarea stării SafetyNet…</string>
<string name="safetyNet_check_success">Verificare SafetyNet cu succes</string>
<string name="safetyNet_api_error">Eroare API SafetyNet</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Setări avansate</string>
<string name="keep_force_encryption">Păstrare criptare forţată</string>
<string name="keep_dm_verity">Păstrare AVB 2.0/dm-verity</string>
<string name="current_installed">Instalată: %1$s</string>
<string name="latest_version">Ultima: %1$s</string>
<string name="uninstall">Dezinstalare</string>
<string name="uninstall_magisk_title">Dezinstalare Magisk</string>
<string name="uninstall_magisk_msg">Toate modulele vor fi dezactivate/eliminate. Accesul la Root va fi eliminat și potențial se vor cripta datele dacă nu sunt în prezent criptate</string>
<string name="update">Actualizare</string>
<!--Module Fragment-->
<string name="no_info_provided">(Nu sunt furnizate informații)</string>
<string name="no_modules_found">Niciun modul</string>
<string name="update_file_created">Modulul va fi actualizat la următoarea repornire</string>
<string name="remove_file_created">Modulul va fi eliminat la următoarea repornire</string>
<string name="remove_file_deleted">Modulul nu va fi eliminat la următoarea repornire</string>
<string name="disable_file_created">Modulul va fi dezactivat la următoarea repornire</string>
<string name="disable_file_removed">Modulul va fi activat la următoarea repornire</string>
<string name="author">Creat de %1$s</string>
<string name="reboot_recovery">Repornire în Recovery</string>
<string name="reboot_bootloader">Repornire în Bootloader</string>
<string name="reboot_download">Repornire în Download</string>
<!--Repo Fragment-->
<string name="update_available">Actualizare disponibilă</string>
<string name="installed">Instalat</string>
<string name="not_installed">Nu este instalat</string>
<string name="updated_on">Actualizat la: %1$s</string>
<string name="sorting_order">Ordine de sortare</string>
<string name="sort_by_name">Sortare după nume</string>
<string name="sort_by_update">Sortare după ultima actualizare</string>
<!--Log Fragment-->
<string name="menuSaveLog">Salvare jurnal</string>
<string name="menuReload">Reîncărcare</string>
<string name="menuClearLog">Șterge jurnal acum</string>
<string name="logs_cleared">Jurnal şters</string>
<string name="log_is_empty">Jurnal gol</string>
<!--About Activity-->
<string name="app_changelog">Lista modificărilor</string>
<string name="translators" />
<string name="app_translators">Traducători</string>
<!-- System Components, Notifications -->
<string name="update_channel">Actualizări Magisk</string>
<string name="progress_channel">Notificări de progres</string>
<string name="download_complete">Descărcare finalizată</string>
<string name="download_file_error">Eroare la descărcarea fișierului</string>
<string name="magisk_update_title">Actualizare Magisk disponibilă!</string>
<string name="manager_update_title">Actualizare Magisk Manager disponibilă!</string>
<!--Toasts, Dialogs-->
<string name="close">Închidere</string>
<string name="repo_install_title">Instalare %1$s</string>
<string name="repo_install_msg">Instalaţi %1$s?</string>
<string name="download">Descărcare</string>
<string name="reboot">Repornire</string>
<string name="settings_reboot_toast">Reporniți pentru a aplica setările</string>
<string name="release_notes">Note de lansare</string>
<string name="repo_cache_cleared">Cache eliminat</string>
<string name="internal_storage">Zip stocat în:\n[Stocare internă]%1$s</string>
<string name="manager_download_install">Apăsați pentru a descărca și instala</string>
<string name="dtbo_patched_title">DTBO a fost modificat!</string>
<string name="dtbo_patched_reboot">Magisk Manager a modificat dtbo.img, reporniţi</string>
<string name="flashing">Procesare</string>
<string name="hide_manager_title">Ascundere Magisk Manager…</string>
<string name="hide_manager_fail_toast">Ascunderea Magisk Manager a eşuat</string>
<string name="open_link_failed_toast">Nu a fost găsită nicio aplicație pentru a deschide linkul…</string>
<string name="download_zip_only">Doar descărcare fişier Zip</string>
<string name="patch_boot_file">Modificare fişier imagine Boot</string>
<string name="direct_install">Instalare directă (Recomandat)</string>
<string name="install_inactive_slot">Instalare în slotul inactiv (După OTA)</string>
<string name="warning">Avertizare</string>
<string name="install_inactive_slot_msg">Dispozitivul dvs. va fi forțat să se încarce în slotul inactiv actual după repornire!\nUtilizați această opțiune numai după finalizarea OTA.\nContinuați?</string>
<string name="select_method">Selectaţi metoda</string>
<string name="boot_file_patch_msg">Selectaţi formatul .img sau .img.tar pentru imaginea de Boot stoc</string>
<string name="complete_uninstall">Dezinstalare totală</string>
<string name="restore_img">Restabilire imagini</string>
<string name="restore_img_msg">Restabilire…</string>
<string name="restore_done">Restabilire finalizată!</string>
<string name="restore_fail">Backup stoc nu există!</string>
<string name="proprietary_title">Descărcare cod proprietar</string>
<string name="proprietary_notice">Magisk Manager este FOSS așa că nu conține codul API SafetyNet de la Google.\n\nPermiteți ca Magisk Manager să descarce o extensie (conține GoogleApiClient) pentru verificările SafetyNet?</string>
<string name="setup_done">Configurare finalizată.</string>
<string name="setup_fail">Configurare eșuată.</string>
<string name="env_fix_title">Necesită configurare suplimentară</string>
<string name="env_fix_msg">Dispozitivul dvs. are nevoie de configurări suplimentare pentru ca Magisk să funcționeze corect. Se va descărca zip-ul de configurare Magisk, doriți să continuați acum?</string>
<string name="setup_title">Configurare adițională</string>
<string name="setup_msg">Rulare configurare mediu…</string>
<string name="downloading_toast">Descărcare %1$s</string>
<string name="no_rw_storage">Această caracteristică nu va funcționa fără permisiunea de a scrie pe memoria externă.</string>
<!--Settings Activity -->
<string name="settings_general_category">General</string>
<string name="settings_dark_theme_title">Temă întunecată</string>
<string name="settings_dark_theme_summary">Activare temă întunecată</string>
<string name="settings_clear_cache_title">Eliminare cache</string>
<string name="settings_clear_cache_summary">Ștergeți informațiile memorate în cache, forțează actualizarea aplicației online</string>
<string name="settings_hide_manager_title">Ascundeţi Magisk Manager</string>
<string name="settings_hide_manager_summary">Reîmpachetare Magisk Manager cu nume de pachet aleatoriu</string>
<string name="settings_restore_manager_title">Restabilire Magisk Manager</string>
<string name="settings_restore_manager_summary">Restabilire Magisk Manager cu pachetul original</string>
<string name="language">Limbă</string>
<string name="system_default">(Implicit)</string>
<string name="settings_update">Setări actualizare</string>
<string name="settings_check_update_title">Verificare actualizări</string>
<string name="settings_check_update_summary">Se verifică periodic în fundal dacă există actualizări</string>
<string name="settings_update_channel_title">Canal de actualizare</string>
<string name="settings_update_stable">Stabil</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalizat</string>
<string name="settings_update_custom_msg">Introduceți un URL personalizat</string>
<string name="settings_boot_format_title">Formatul Boot-ului modificat</string>
<string name="settings_boot_format_summary">Selectați formatul fișierului imaginii de Boot modificată.\nAlegeţi .img pentru flash prin modul fastboot/download; alegeţi .img.tar pentru flash prin ODIN.</string>
<string name="settings_core_only_title">Mod de bază</string>
<string name="settings_core_only_summary">Se activează numai caracteristicile principale, toate modulele nu vor fi încărcate. MagiskSU şi MagiskHide vor fi în continuare activate</string>
<string name="settings_magiskhide_summary">Ascundeţi Magisk de la diferite detectări</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts suport pentru aplicațiile Adblock</string>
<string name="settings_hosts_toast">Modulul Systemless hosts adăugat</string>
<string name="settings_su_app_adb">Aplicaţii şi ADB</string>
<string name="settings_su_app">Doar aplicaţii</string>
<string name="settings_su_adb">Doar ADB</string>
<string name="settings_su_disable">Dezactivat</string>
<string name="settings_su_request_10">10 secunde</string>
<string name="settings_su_request_15">15 de secunde</string>
<string name="settings_su_request_20">20 de secunde</string>
<string name="settings_su_request_30">30 de secunde</string>
<string name="settings_su_request_45">45 de secunde</string>
<string name="settings_su_request_60">60 de secunde</string>
<string name="superuser_access">Acces Superuser</string>
<string name="auto_response">Răspuns automat</string>
<string name="request_timeout">Expirare</string>
<string name="superuser_notification">Notificare Superuser</string>
<string name="request_timeout_summary">%1$d secunde</string>
<string name="settings_su_reauth_title">Reautentificare după actualizare</string>
<string name="settings_su_reauth_summary">Reautentificare permisiuni pentru superuser după o actualizare a aplicației</string>
<string name="settings_su_fingerprint_title">Activați autentificarea cu amprenta digitală</string>
<string name="settings_su_fingerprint_summary">Utilizați scanerul de amprentă pentru a permite solicitările superuser</string>
<string name="auth_fingerprint">Autentificare amprentă digitală</string>
<string name="multiuser_mode">Mod Multiutilizator</string>
<string name="settings_owner_only">Numai proprietarul dispozitivului</string>
<string name="settings_owner_manage">Gestionat de proprietarul dispozitivului</string>
<string name="settings_user_independent">Utilizator independent</string>
<string name="owner_only_summary">Numai proprietarul are acces la root</string>
<string name="owner_manage_summary">Numai proprietarul poate gestiona accesul la root și să primească solicitări</string>
<string name="user_indepenent_summary">Fiecare utilizator are propriile reguli de acces la root</string>
<string name="mount_namespace_mode">Mod montare spaţiu de nume</string>
<string name="settings_ns_global">Spaţiu de nume global</string>
<string name="settings_ns_requester">Spaţiu de nume moştenit</string>
<string name="settings_ns_isolate">Spațiu de nume izolat</string>
<string name="global_summary">Toate sesiunile de root utilizează spațiul de nume global</string>
<string name="requester_summary">Sesiunile de root vor moșteni spațiul de nume al solicitantului</string>
<string name="isolate_summary">Fiecare sesiune de root va avea propriul spațiu de nume izolat</string>
<string name="android_o_not_support">Nu se acceptă pe Android 8.0+</string>
<string name="disable_fingerprint">Nu au fost setate amprente sau scanerul de apmrentă lipseşte</string>
<!--Superuser-->
<string name="su_request_title">Solicitare Superuser</string>
<string name="deny_with_str">Refuzaţi %1$s</string>
<string name="deny">Refuzaţi</string>
<string name="prompt">Solicitare</string>
<string name="grant">Permiteţi</string>
<string name="su_warning">Acordă acces complet la dispozitivul dvs..\nRefuzaţi dacă nu sunteţi sigur!</string>
<string name="forever">Pentru totdeauna</string>
<string name="once">O singura dată</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s i-au fost acordate drepturi Superuser</string>
<string name="su_deny_toast">%1$s i-au fost refuzate drepturi Superuser</string>
<string name="no_apps_found">Nicio aplicaţie</string>
<string name="su_snack_grant">Drepturile Superuser pentru %1$s au fost acordate</string>
<string name="su_snack_deny">Drepturile Superuser pentru %1$s au fost refuzate</string>
<string name="su_snack_notif_on">Notificările pentru %1$s au fost acordate</string>
<string name="su_snack_notif_off">Notificările pentru %1$s au fost refuzate</string>
<string name="su_snack_log_on">Logarea pentru %1$s a fost activată</string>
<string name="su_snack_log_off">Logarea pentru %1$s a fost dezactivată</string>
<string name="su_snack_revoke">Drepturile pentru %1$s sunt revocate</string>
<string name="su_revoke_title">Revocaţi?</string>
<string name="su_revoke_msg">Confirmați revocarea drepturilor pentru %1$s?</string>
<string name="toast">Mesaj</string>
<string name="none">Nimic</string>
<string name="auth_fail">Autentificare eşuată</string>
<!--Superuser logs-->
<string name="target_uid">UID: %1$d</string>
<string name="command">Comandă: %1$s</string>
</resources>

View File

@@ -1,211 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Модули</string>
<string name="downloads">Репозиторий</string>
<string name="superuser">Суперпользователь</string>
<string name="log">Логи</string>
<string name="settings">Настройки</string>
<string name="install">Установка</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk не установлен</string>
<string name="checking_for_updates">Проверка обновлений…</string>
<string name="invalid_update_channel">Некорректный канал обновлений</string>
<string name="safetyNet_check_text">Проверить статус SafetyNet</string>
<string name="checking_safetyNet_status">Проверка статуса SafetyNet…</string>
<string name="safetyNet_check_success">Результат проверки SafetyNet</string>
<string name="safetyNet_api_error">Ошибка SafetyNet API</string>
<string name="safetyNet_res_invalid">Некорректный ответ</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Расширенные опции</string>
<string name="keep_force_encryption">Сохранить шифрование</string>
<string name="keep_dm_verity">Сохранить AVB 2.0/dm-verity</string>
<string name="current_installed">Установлена: %1$s</string>
<string name="latest_version">Последняя: %1$s</string>
<string name="uninstall">Удаление</string>
<string name="uninstall_magisk_title">Удаление Magisk</string>
<string name="uninstall_magisk_msg">Все модули будут отключены/удалены. Root-права будут удалены. Шифрование будет активировано.</string>
<string name="update">Обновить</string>
<!--Module Fragment-->
<string name="no_info_provided">(Нет информации)</string>
<string name="no_modules_found">Модули не найдены</string>
<string name="update_file_created">Модуль будет обновлён после перезагрузки</string>
<string name="remove_file_created">Модуль будет удалён после перезагрузки</string>
<string name="remove_file_deleted">Модуль не будет удалён после перезагрузки</string>
<string name="disable_file_created">Модуль будет отключён после перезагрузки</string>
<string name="disable_file_removed">Модуль будет активирован после перезагрузки</string>
<string name="author">Автор: %1$s</string>
<string name="reboot_recovery">Перезагрузка в Recovery</string>
<string name="reboot_bootloader">Перезагрузка в Bootloader</string>
<string name="reboot_download">Перезагрузка в Download</string>
<!--Repo Fragment-->
<string name="update_available">Доступно обновление</string>
<string name="installed">Установлены</string>
<string name="not_installed">Не установлены</string>
<string name="updated_on">Обновлено: %1$s</string>
<string name="sorting_order">Сортировка</string>
<string name="sort_by_name">По имени</string>
<string name="sort_by_update">По дате обновления</string>
<!--Log Fragment-->
<string name="menuSaveLog">Сохранить лог</string>
<string name="menuReload">Обновить</string>
<string name="menuClearLog">Очистить лог</string>
<string name="logs_cleared">Лог успешно очищен</string>
<string name="log_is_empty">Лог пуст</string>
<!--About Activity-->
<string name="app_changelog">Список изменений</string>
<string name="translators">Displax [4PDA]</string>
<string name="app_translators">Переводчики</string>
<!--Toasts, Dialogs-->
<string name="close">Закрыть</string>
<string name="repo_install_title">Установка %1$s</string>
<string name="repo_install_msg">Установить %1$s ?</string>
<string name="download">Скачать</string>
<string name="reboot">Перезагрузка</string>
<string name="magisk_update_title">Доступно обновление Magisk!</string>
<string name="settings_reboot_toast">Для применения настроек перезагрузите устройство</string>
<string name="release_notes">О версии</string>
<string name="repo_cache_cleared">Кэш репозитория очищен</string>
<string name="internal_storage">Расположение архива:\n[Внутреннее Хранилище]%1$s</string>
<string name="manager_update_title">Доступно обновление Magisk Manager!</string>
<string name="manager_download_install">Нажмите для установки</string>
<string name="dtbo_patched_title">DTBO пропатчен!</string>
<string name="dtbo_patched_reboot">Magisk Manager пропатчил dtbo.img. Перезагрузите устройство.</string>
<string name="update_channel">Обновления Magisk</string>
<string name="flashing">Прошивка…</string>
<string name="hide_manager_title">Скрытие Magisk Manager…</string>
<string name="hide_manager_fail_toast">Скрытие Magisk Manager неудачно!</string>
<string name="open_link_failed_toast">Не найдено приложений для открытия ссылки…</string>
<string name="download_zip_only">Загрузка установочного ZIP</string>
<string name="patch_boot_file">Пропатчить образ ядра (boot.img)</string>
<string name="direct_install">Прямая установка (Рекомендуется)</string>
<string name="install_inactive_slot">Установка в неактивный слот (После OTA)</string>
<string name="warning">Предупреждение</string>
<string name="install_inactive_slot_msg">Ваше устройство будет принудительно перезагружено в неактивный слот!\nИспользуйте эту опцию только при установке OTA.\nПродолжить?</string>
<string name="select_method">Выбор способа</string>
<string name="boot_file_patch_msg">Выберите файл ядра (boot) - *.img или *.img.tar</string>
<string name="complete_uninstall">Полное удаление</string>
<string name="restore_img">Восстановить разделы</string>
<string name="restore_img_msg">Восстановление…</string>
<string name="restore_done">Восстановление завершено!</string>
<string name="restore_fail">Резервная копия отсутствует!</string>
<string name="proprietary_title">Загрузка SafetyNet</string>
<string name="proprietary_notice">Magisk Manager — свободно распространяемый продукт, он не содержит собственный код SafetyNet API от Google.\n\nРазрешить Magisk Manager загрузить расширение для проверки SafetyNet? (содержит GoogleApiClient)</string>
<string name="setup_done">Установка завершена</string>
<string name="setup_fail">Ошибка установки</string>
<string name="env_fix_title">Требуется дополнительная установка</string>
<string name="env_fix_msg">Вашему устройству требуется дополнительная установка Magisk для корректной работы. Будет загружен установочный ZIP Magisk, продолжить?</string>
<string name="setup_title">Дополнительная установка</string>
<string name="setup_msg">Настройка рабочей среды…</string>
<string name="download_file_error">Ошибка загрузки файла</string>
<string name="downloading_toast">Загрузка %1$s</string>
<string name="no_rw_storage">Требуется разрешение на запись во внешнее хранилище.</string>
<!--Settings Activity -->
<string name="settings_general_category">Основные</string>
<string name="settings_dark_theme_title">Тёмная тема</string>
<string name="settings_dark_theme_summary">Включить тёмное оформление</string>
<string name="settings_clear_cache_title">Очистка кэша репозитория</string>
<string name="settings_clear_cache_summary">Очистить сохранённую информацию о репозитории. Будет обновлён принудительно</string>
<string name="settings_hide_manager_title">Скрытие Magisk Manager</string>
<string name="settings_hide_manager_summary">Пересобрать Magisk Manager со случайным именем пакета</string>
<string name="settings_restore_manager_title">Восстановление Magisk Manager</string>
<string name="settings_restore_manager_summary">Восстановить Magisk Manager с исходным именем пакета</string>
<string name="language">Язык</string>
<string name="system_default">По умолчанию (Системный)</string>
<string name="settings_update">Настройки обновлений</string>
<string name="settings_check_update_title">Проверка обновлений</string>
<string name="settings_check_update_summary">Периодически проверять обновления в фоне</string>
<string name="settings_update_channel_title">Источник обновлений</string>
<string name="settings_update_stable">Стабильный канал</string>
<string name="settings_update_beta">Beta канал</string>
<string name="settings_update_custom">Сторонний канал</string>
<string name="settings_update_custom_msg">Укажите ссылку</string>
<string name="settings_boot_format_title">Тип образа ядра</string>
<string name="settings_boot_format_summary">Выберите тип патченого образа ядра:\n*.img - для прошивки через fastboot/download режимы\n*.img.tar - для прошивки через ODIN (Samsung)</string>
<string name="settings_core_only_title">Magisk Core</string>
<string name="settings_core_only_summary">Активировать только основные возможности. Модули не будут загружены. MagiskSU и Magisk Hide останутся активными</string>
<string name="settings_magiskhide_summary">Скрывать Magisk от различных проверок</string>
<string name="settings_hosts_title">Внесистемные хосты</string>
<string name="settings_hosts_summary">Поддержка внесистемных хостов для приложений, блокирующих рекламу</string>
<string name="settings_su_app_adb">Приложения и ADB</string>
<string name="settings_su_app">Только приложения</string>
<string name="settings_su_adb">Только ADB</string>
<string name="settings_su_disable">Отключён</string>
<string name="settings_su_request_10">10 секунд</string>
<string name="settings_su_request_15">15 секунд</string>
<string name="settings_su_request_20">20 секунд</string>
<string name="settings_su_request_30">30 секунд</string>
<string name="settings_su_request_45">45 секунд</string>
<string name="settings_su_request_60">60 секунд</string>
<string name="superuser_access">Уровень доступа</string>
<string name="auto_response">Автоматический ответ</string>
<string name="request_timeout">Ожидание ответа</string>
<string name="superuser_notification">Уведомления суперпользователя</string>
<string name="request_timeout_summary">%1$d секунд</string>
<string name="settings_su_reauth_title">Повторная аутентификация</string>
<string name="settings_su_reauth_summary">Повторный запрос прав суперпользователя после обновления приложений</string>
<string name="settings_su_fingerprint_title">Биометрическая аутентификация</string>
<string name="settings_su_fingerprint_summary">Использовать дактилоскопический сканер для обработки запросов Суперпользователя</string>
<string name="auth_fingerprint">Запрос отпечатка</string>
<string name="multiuser_mode">Многопользовательский режим</string>
<string name="settings_owner_only">Только владелец</string>
<string name="settings_owner_manage">Регулировка владельцем</string>
<string name="settings_user_independent">Правила пользователей</string>
<string name="owner_only_summary">Только владелец имеет Root-доступ</string>
<string name="owner_manage_summary">Только владелец управляет Root-доступом и обрабатывает запросы</string>
<string name="user_indepenent_summary">Каждый пользователь имеет свои собственные правила Root-доступа</string>
<string name="mount_namespace_mode">Настройка именных пространств</string>
<string name="settings_ns_global">Общее именное пространство</string>
<string name="settings_ns_requester">Наследуемое именное пространство</string>
<string name="settings_ns_isolate">Изолированное именное пространство</string>
<string name="global_summary">Сессии суперпользователя используют общее именное пространство</string>
<string name="requester_summary">Сессии суперпользователя наследуют именное пространство запрашивающего</string>
<string name="isolate_summary">Сессии суперпользователя используют изолированные именные пространства</string>
<string name="android_o_not_support">Не поддерживается в Android 8.0+</string>
<string name="disable_fingerprint">Не поддерживается устройством или не заданы отпечатки</string>
<!--Superuser-->
<string name="su_request_title">Запрос прав суперпользователя</string>
<string name="deny_with_str">Отказать %1$s</string>
<string name="deny">Отказать</string>
<string name="prompt">Запрос</string>
<string name="grant">Предоставить</string>
<string name="su_warning">Предоставить полный доступ к устройству.\nЕсли не уверены, что желаете продолжить, отклоните данное действие!</string>
<string name="forever">Навсегда</string>
<string name="once">Сейчас</string>
<string name="tenmin">10 мин.</string>
<string name="twentymin">20 мин.</string>
<string name="thirtymin">30 мин.</string>
<string name="sixtymin">60 мин.</string>
<string name="su_allow_toast">%1$s предоставлены права суперпользователя</string>
<string name="su_deny_toast">%1$s отказано в правах суперпользователя</string>
<string name="no_apps_found">Приложения не обнаружены</string>
<string name="su_snack_grant">%1$s предоставлены права суперпользователя</string>
<string name="su_snack_deny">%1$s отказано в правах суперпользователя</string>
<string name="su_snack_notif_on">Уведомления для %1$s включены</string>
<string name="su_snack_notif_off">Уведомления для %1$s отключены</string>
<string name="su_snack_log_on">Логирование для %1$s включено</string>
<string name="su_snack_log_off">Логирование для %1$s отключено</string>
<string name="su_snack_revoke">Настройки для %1$s сброшены</string>
<string name="su_revoke_title">Сброс настроек</string>
<string name="su_revoke_msg">Сбросить настройки для %1$s?</string>
<string name="toast">Всплывающие уведомления</string>
<string name="none">Нет</string>
<string name="auth_fail">Ошибка аутентификации</string>
<!--Superuser logs-->
<string name="target_uid">UID: %1$d</string>
<string name="command">Команда: %1$s</string>
</resources>

View File

@@ -1,183 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Модули</string>
<string name="downloads">Преузимања</string>
<string name="superuser">Супер-корисник</string>
<string name="log">Дневник</string>
<string name="settings">Подешавања</string>
<string name="install">Инсталација</string>
<!--Status Fragment-->
<string name="magisk_version_error">Магиск није инсталиран</string>
<string name="checking_for_updates">Проверавам Ажурирања…</string>
<string name="invalid_update_channel">Непостојећи Канал Ажурирања</string>
<string name="safetyNet_check_text">Притисни да започнеш СигурнаМрежа проверу</string>
<string name="checking_safetyNet_status">Проверавам СигурнаМрежа статус…</string>
<string name="safetyNet_check_success">СигурнаМрежа Провера Успешна</string>
<string name="safetyNet_api_error">СигурнаМрежа АПИ Грешка</string>
<string name="safetyNet_res_invalid">Одговор није валидан</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Напредна Подешавања</string>
<string name="keep_force_encryption">Задржи форсирану енкрипцију</string>
<string name="keep_dm_verity">Задржи AVB 2.0/dm-verity</string>
<string name="current_installed">Инсталирана: %1$s</string>
<string name="latest_version">Најновија: %1$s</string>
<string name="uninstall">Унинсталирај</string>
<string name="uninstall_magisk_title">Унинсталирај Магиск</string>
<string name="uninstall_magisk_msg">Сви модули ће бити онеспособљени/уклоњени. Корен ће бити уклоњен, и потенцијално енкриптовати твоје податке уколико већ нису енкриптовани</string>
<string name="update">Ажурирање</string>
<!--Module Fragment-->
<string name="no_info_provided">(Без информација)</string>
<string name="no_modules_found">Нема пронађених модула</string>
<string name="update_file_created">Модул ће бити ажуриран после рестарта</string>
<string name="remove_file_created">Модул ће бити уклоњен после рестарта</string>
<string name="remove_file_deleted">Модул неће бити уклоњен после рестарта</string>
<string name="disable_file_created">Модул ће бити онеспособљен после рестарта</string>
<string name="disable_file_removed">Модул ће бити оспособљен после рестарта</string>
<string name="author">Креирао %1$s</string>
<!--Repo Fragment-->
<string name="update_available">Ажурирање доступно</string>
<string name="installed">Инсталирано</string>
<string name="not_installed">Није инсталирано</string>
<!--Log Fragment-->
<string name="menuSaveLog">Сачувај дневник</string>
<string name="menuReload">Поново учитај</string>
<string name="menuClearLog">Обриши дневник</string>
<string name="logs_cleared">Дневник успешно креиран</string>
<string name="log_is_empty">Дневник је празан</string>
<!--About Activity-->
<string name="app_changelog">Дневник промена апликације</string>
<string name="translators" />
<string name="app_translators">Преводиоци апликације</string>
<!--Toasts, Dialogs-->
<string name="close">Затвори</string>
<string name="repo_install_title">Инсталирај %1$s</string>
<string name="repo_install_msg">Да ли желите да инсталирате %1$s?</string>
<string name="download">Преузми</string>
<string name="reboot">Рестартуј</string>
<string name="magisk_update_title">Нови Адбејт Магиска Доступан!</string>
<string name="settings_reboot_toast">Рестартуј да примениш подешавања</string>
<string name="release_notes">Белешке обљављивања</string>
<string name="repo_cache_cleared">Кеш спремишта обрисан</string>
<string name="internal_storage">Зип је сачуван у:\n[Интерно складиште]%1$s</string>
<string name="manager_update_title">Ново Ажурирање Магиск Менаџера Доступно!</string>
<string name="manager_download_install">Притисни да преузмеш и инсталираш</string>
<string name="dtbo_patched_title">DTBO је закрпљен!</string>
<string name="dtbo_patched_reboot">Магиск Менаџер је закрпио dtbo.img, рестартујте телефон</string>
<string name="update_channel">Магиск Ажурирање</string>
<string name="flashing">Флешовање</string>
<string name="hide_manager_title">Сакривам Магиск Менаџер…</string>
<string name="hide_manager_fail_toast">Скривање Магиск Менаџера неуспешно…</string>
<string name="download_zip_only">Преузми само Зип</string>
<string name="patch_boot_file">Закрпи фајл слике покретања</string>
<string name="direct_install">Директна Инсталација (Препоручено)</string>
<string name="select_method">Изабери Методу</string>
<string name="boot_file_patch_msg">Изабери испис фабричког фајла слике покретања у .img или img.tar формату</string>
<string name="complete_uninstall">Комплетна Унинсталација</string>
<string name="restore_done">Повратак успешан!</string>
<string name="restore_fail">Фабрички бекап не постоји!</string>
<string name="proprietary_title">Преузми Власнички Код</string>
<string name="proprietary_notice">Магиск Менаџер је \'FOSS\' што значи да не садржи Гуглов власнички код од СигурнаМрежа АПИ.\n\nДа ли дозвољавате да Магиск Менаџер преузме додатак (садржи GoogleApiClient) за СигурнаМрежа провере?</string>
<string name="download_file_error">Грешка при преузимању фајла</string>
<string name="downloading_toast">Преузимање %1$s</string>
<string name="no_rw_storage">Ово својство неће радити без дозволе приступу екстерном складишту.</string>
<!--Settings Activity -->
<string name="settings_general_category">Генерално</string>
<string name="settings_dark_theme_title">Црна тема</string>
<string name="settings_dark_theme_summary">Омогући црну тему</string>
<string name="settings_clear_cache_title">Обриши кеш спремишта</string>
<string name="settings_clear_cache_summary">Очисти кеширану имформацију за онлајн спремишта, форсира апликацију да освежи онлајн</string>
<string name="settings_hide_manager_title">Сакриј Магиск Менаџер</string>
<string name="settings_hide_manager_summary">Препакуј Магиск Менаџер са насумичним именом пакета</string>
<string name="language">Језик</string>
<string name="system_default">(Фабрички Система)</string>
<string name="settings_update">Подешавања Ажурирања</string>
<string name="settings_update_channel_title">Канал Ажурирања</string>
<string name="settings_update_stable">Стабилан</string>
<string name="settings_update_beta">Бета</string>
<string name="settings_update_custom">По наруџби</string>
<string name="settings_update_custom_msg">Унеси наруџбени УРЛ</string>
<string name="settings_boot_format_title">Закрпљено Покретање Излазни Формат</string>
<string name="settings_boot_format_summary">Изабери формат излазних закрпљених слика покретања.\nИзаберите .img ако флешујете преко fastboot/download режима; Изаберите .img.tar ако флешујете уз ОДИН.</string>
<string name="settings_core_only_title">Магиск Основни Режим</string>
<string name="settings_core_only_summary">Омогућава само основне карактеристике, сви модули неће бити учитани. МагискСК и МагискСакриј ће бити омогућени</string>
<string name="settings_magiskhide_summary">Сакриј Магиск од разних детекција</string>
<string name="settings_hosts_title">Без-системски домаћини (hosts)</string>
<string name="settings_hosts_summary">Подршка без-системских домаћина за апликације за блокирање реклама</string>
<string name="settings_su_app_adb">Апликације и АДБ</string>
<string name="settings_su_app">Само Апликације</string>
<string name="settings_su_adb">Само АДБ</string>
<string name="settings_su_disable">Онемогућено</string>
<string name="settings_su_request_10">10 секунди</string>
<string name="settings_su_request_15">15 секунди</string>
<string name="settings_su_request_20">20 секунди</string>
<string name="settings_su_request_30">30 секунди</string>
<string name="settings_su_request_45">45 секунди</string>
<string name="settings_su_request_60">60 секунди</string>
<string name="superuser_access">Приступ Супер-кориснику</string>
<string name="auto_response">Аутоматски одговор</string>
<string name="request_timeout">Истек захтева</string>
<string name="superuser_notification">Нотификације Супер-корисника</string>
<string name="request_timeout_summary">%1$d секунди</string>
<string name="settings_su_reauth_title">Поново одобри после ажурирања</string>
<string name="settings_su_reauth_summary">Поново одобри дозволу Супер-корисника после ажурирања апликације</string>
<string name="multiuser_mode">Више-кориснички режим</string>
<string name="settings_owner_only">Власник уређаја само</string>
<string name="settings_owner_manage">Одређено од стране власника</string>
<string name="settings_user_independent">Независно од корисника</string>
<string name="owner_only_summary">Само власник има приступ корену</string>
<string name="owner_manage_summary">Само власник може да приступа корену и да прими захтеве за њега</string>
<string name="user_indepenent_summary">Сваки корисник има своја правила корена</string>
<string name="mount_namespace_mode">Постоље режима имена простора</string>
<string name="settings_ns_global">Глобално име простора</string>
<string name="settings_ns_requester">Наслеђено име простора</string>
<string name="settings_ns_isolate">Ограђено име простора</string>
<string name="global_summary">Све коренске сесије користе глобално име простора</string>
<string name="requester_summary">Коренске сесије ће наследити свој простор именовања</string>
<string name="isolate_summary">Свака коренска сесија ће имати свој изоловани простор именовања</string>
<!--Superuser-->
<string name="su_request_title">Супер-кориснички захтев</string>
<string name="deny_with_str">Забрани%1$s</string>
<string name="deny">Забрани</string>
<string name="prompt">Захтев</string>
<string name="grant">Дозволи</string>
<string name="su_warning">Пружа потпун приступ вашем уређају.\nЗабраните ако нисте сигурни!</string>
<string name="forever">Заувек</string>
<string name="once">Једном</string>
<string name="tenmin">10 мин</string>
<string name="twentymin">20 мин</string>
<string name="thirtymin">30 мин</string>
<string name="sixtymin">60 мин</string>
<string name="su_allow_toast">%1$s је добио права на Супер-корисника</string>
<string name="su_deny_toast">%1$s није добио права на Супер-корисника</string>
<string name="no_apps_found">Нема пронађених апликација</string>
<string name="su_snack_grant">Супер-корисничка права од %1$s су пружена</string>
<string name="su_snack_deny">Супер-корисничка права од %1$s су одбијена</string>
<string name="su_snack_notif_on">Нотификације од %1$s су омогућене</string>
<string name="su_snack_notif_off">Нотификације од %1$s су онемогућене</string>
<string name="su_snack_log_on">Записивање у дневник за %1$s је омогућено</string>
<string name="su_snack_log_off">Записивање у дневник за %1$s је онемогућено</string>
<string name="su_snack_revoke">%1$s права су опозвана </string>
<string name="su_revoke_title">Опозови?</string>
<string name="su_revoke_msg">Потврди да опозовеш права од %1$s?</string>
<string name="toast">Тост</string>
<string name="none">Ниједан</string>
<!--Superuser logs-->
<string name="target_uid">Циљани УИД: %1$d</string>
<string name="command">Команда: %1$s</string>
</resources>

View File

@@ -1,155 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Moduler</string>
<string name="downloads">Nerladdningar</string>
<string name="superuser">Superuser</string>
<string name="log">Logg</string>
<string name="settings">Inställningar</string>
<string name="install">Install</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk är inte installerad</string>
<string name="checking_for_updates">Söker efter uppdateringar…</string>
<string name="safetyNet_check_text">Tryck för att starta SafetyNet-kontroll</string>
<string name="checking_safetyNet_status">Kontrollerar SafetyNet-status…</string>
<string name="safetyNet_check_success">SafetyNet-kontroll lyckades</string>
<string name="safetyNet_res_invalid">Svaret är ogiltigt</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Advancerade inställningar</string>
<string name="keep_force_encryption">Fortsätt tvinga kryptering</string>
<string name="keep_dm_verity">Behåll AVB 2.0/dm-verity</string>
<string name="current_installed">Installerad: %1$s</string>
<string name="latest_version">Senaste: %1$s</string>
<string name="uninstall">Avinstallera</string>
<string name="uninstall_magisk_title">Avinstallera Magisk</string>
<string name="update">Uppdatera</string>
<!--Module Fragment-->
<string name="no_info_provided">(Ingen information tillhandahållen)</string>
<string name="no_modules_found">Hittade inga moduler</string>
<string name="update_file_created">Modulen kommer att uppdateras vid nästa omstart</string>
<string name="remove_file_created">Modulen kommer att tas bort vid nästa omstart</string>
<string name="remove_file_deleted">Modulen kommer att inte att tas bort vid nästa omstart</string>
<string name="disable_file_created">Modulen kommer att inaktiveras vid nästa omstart</string>
<string name="disable_file_removed">Modulen kommer att aktiveras vid nästa omstart</string>
<string name="author">Skapad av %1$s</string>
<!--Repo Fragment-->
<string name="update_available">Uppdatering tillgänglig</string>
<string name="installed">Installerad</string>
<string name="not_installed">Inte installerad</string>
<!--Log Fragment-->
<string name="menuSaveLog">Spara loggen</string>
<string name="menuReload">Uppdatera</string>
<string name="menuClearLog">Rensa loggen</string>
<string name="logs_cleared">Loggen rensad</string>
<string name="log_is_empty">Loggen är tom</string>
<!--About Activity-->
<string name="app_changelog">Ändringslogg</string>
<string name="translators" />
<string name="app_translators">Översättare</string>
<!--Toasts, Dialogs-->
<string name="close">Stäng</string>
<string name="repo_install_title">Installera %1$s</string>
<string name="repo_install_msg">Vill du installera %1$s ?</string>
<string name="download">Ladda ner</string>
<string name="reboot">Starta om</string>
<string name="magisk_update_title">En uppdatering av Magisk finns tillgänglig!</string>
<string name="settings_reboot_toast">Starta om för att tillämpa inställningar</string>
<string name="release_notes">Release notes</string>
<string name="repo_cache_cleared">Repo-cache rensad</string>
<string name="internal_storage">ZIP-filen är sparad i:\n[Internal Storage]%1$s</string>
<string name="manager_update_title">En uppdatering av Magisk maneger finns tillgänglig!</string>
<string name="manager_download_install">Tryck för att ladda ner och installera</string>
<string name="update_channel">Magiska uppdateringar</string>
<string name="download_file_error">Fel vid nerladdning av fil</string>
<string name="downloading_toast">Laddar ner %1$s</string>
<string name="no_rw_storage">Denna funktionen måste ha behörighet att skriva till externt lagringsutrymme.</string>
<!--Settings Activity -->
<string name="settings_general_category">Allmän</string>
<string name="settings_dark_theme_title">Mörkt tema</string>
<string name="settings_dark_theme_summary">Aktivera mörkt tema</string>
<string name="settings_clear_cache_title">Rensa repo-cache</string>
<string name="settings_clear_cache_summary">Rensa den lagrade information för online-repos, tvingar appen att uppdatera online</string>
<string name="settings_core_only_title">Endast Magisk kärnläge</string>
<string name="settings_core_only_summary">Aktiverar endast kärnfunktioner, alla moduler laddas inte. MagiskSU och MagiskHide kommer fortfarande att vara aktiverade</string>
<string name="settings_magiskhide_summary">Dölj Magisk från att bli upptäckt</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts-stöd för Adblock-appar</string>
<string name="settings_su_app_adb">Apps och ADB</string>
<string name="settings_su_app">Endast appar</string>
<string name="settings_su_adb">Endast ADB</string>
<string name="settings_su_disable">Inaktiverad</string>
<string name="settings_su_request_10">10 sekunder</string>
<string name="settings_su_request_15">15 sekunder</string>
<string name="settings_su_request_20">20 sekunder</string>
<string name="settings_su_request_30">30 sekunder</string>
<string name="settings_su_request_45">45 sekunder</string>
<string name="settings_su_request_60">60 sekunder</string>
<string name="superuser_access">Superuser-tillgång</string>
<string name="auto_response">Automatiskt svar</string>
<string name="request_timeout">Förfrågnings-timeout</string>
<string name="superuser_notification">Superuser-avisering</string>
<string name="request_timeout_summary">%1$d sekunder</string>
<string name="settings_su_reauth_title">Återautentisera efter uppdatering</string>
<string name="settings_su_reauth_summary">Återautentisera superuser-behörigheter efter en applikationsuppdatering</string>
<string name="multiuser_mode">Multianvändarläge</string>
<string name="settings_owner_only">Endast ägaren av enheten</string>
<string name="settings_owner_manage">Enhetsägarhantering</string>
<string name="settings_user_independent">Användaroberoende</string>
<string name="owner_only_summary">Endast ägaren har root-tillgång</string>
<string name="owner_manage_summary">Endast ägaren kan hantera root-åtkomst och få begärda förfrågningar</string>
<string name="user_indepenent_summary">Varje användare har sina egna separata root-regler</string>
<string name="mount_namespace_mode">Montera namnrymdsläge</string>
<string name="settings_ns_global">Global namnrymd</string>
<string name="settings_ns_requester">Ärv namnrymden</string>
<string name="settings_ns_isolate">Isolerad namnrymd</string>
<string name="global_summary">Alla root-sessioner använder den globala monteringsnamnrymden</string>
<string name="requester_summary">Root-sessioner kommer att ärva den sökandes namnrymd</string>
<string name="isolate_summary">Varje root-session kommer att ha sin egen isolerade namnrymd</string>
<!--Superuser-->
<string name="su_request_title">Superuser-förfrågan</string>
<string name="deny_with_str">Neka%1$s</string>
<string name="deny">Neka</string>
<string name="prompt">Fråga</string>
<string name="grant">Bevilja</string>
<string name="su_warning">Beviljar full tillgång till din enhet.\nNeka om du är osäker!</string>
<string name="forever">För alltid</string>
<string name="once">En gång</string>
<string name="tenmin">10 min</string>
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s är beviljad Superuser-rättigheter</string>
<string name="su_deny_toast">%1$s är nekad Superuser-rättigheter</string>
<string name="no_apps_found">Hittade inga appar</string>
<string name="su_snack_grant">Superuser-rättigheter av %1$s är beviljad</string>
<string name="su_snack_deny">Superuser-rättigheter av %1$s är nekad</string>
<string name="su_snack_notif_on">Aviseringar från %1$s är aktiverad</string>
<string name="su_snack_notif_off">Aviseringar från %1$s är inaktiverade</string>
<string name="su_snack_log_on">Loggning av %1$s är aktiverad</string>
<string name="su_snack_log_off">Loggning av %1$s är inaktiverad</string>
<string name="su_snack_revoke">%1$s rättigheter är upphävda</string>
<string name="su_revoke_title">Upphäv?</string>
<string name="su_revoke_msg">Bekräfta upphävning av %1$s rättigheter?</string>
<string name="toast">Toast-meddelande</string>
<string name="none">Inga</string>
<!--Superuser logs-->
<string name="target_uid">Mål-UID: %1$d</string>
<string name="command">Kommando: %1$s</string>
</resources>

View File

@@ -1,217 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">โมดูล</string>
<string name="downloads">ดาวน์โหลด</string>
<string name="superuser">Superuser</string>
<string name="log">บันทึก</string>
<string name="settings">ตั้งค่า</string>
<string name="install">ติดตั้ง</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk ไม่ได้ถูกติดตั้ง</string>
<string name="checking_for_updates">กำลังตรวจสอบการอัพเดต…</string>
<string name="invalid_update_channel">ช่องทางการอัพเดตไม่ถูกต้อง</string>
<string name="safetyNet_check_text">แตะเพื่อเริ่มการตรวจสอบ SafetyNet</string>
<string name="checking_safetyNet_status">กำลังตรวจสอบสถานะ SafetyNet…</string>
<string name="safetyNet_check_success">สถานะ SafetyNet สมบูรณ์</string>
<string name="safetyNet_api_error">SafetyNet API เกิดข้อผิดพลาด</string>
<string name="safetyNet_res_invalid">คำตอบรับไม่ถูกต้อง</string>
<string name="magisk_up_to_date">Magisk เวอร์ชันล่าสุดแล้ว</string>
<string name="manager_up_to_date">Magisk Manager เวอร์ชันล่าสุดแล้ว</string>
<string name="advanced_settings_title">ขั้นสูง</string>
<string name="keep_force_encryption">เก็บค่าบังคับการเข้ารหัส</string>
<string name="keep_dm_verity">เก็บค่า AVB 2.0/dm-verity</string>
<string name="current_installed">ที่ถูกติดตั้ง: %1$s</string>
<string name="latest_version">ล่าสุด: %1$s</string>
<string name="uninstall">ถอนการติดตั้ง</string>
<string name="uninstall_magisk_title">ถอนการติดตั้ง Magisk</string>
<string name="uninstall_magisk_msg">โมดูลทั้งหมดจะถูกปิดการใช้งาน/ถูกลบ, สิทธิการเข้าถึง Root จะถูกลบ และข้อมูลของคุณอาจถูกเข้ารหัส</string>
<string name="update">อัพเดต</string>
<!--Module Fragment-->
<string name="no_info_provided">(ไม่มีข้อมูล)</string>
<string name="no_modules_found">ไม่พบโมดูล</string>
<string name="update_file_created">โมดูลจะถูกอัพเดตในการรีบู๊ตครั้งหน้า</string>
<string name="remove_file_created">โมดูลจะถูกลบในการรีบู๊ตครั้งหน้า</string>
<string name="remove_file_deleted">โมดูลจะไม่ถูกลบในการรีบู๊ตครั้งหน้า</string>
<string name="disable_file_created">โมดูลจะถูกเปิดใช้งานในการรีบู๊ตครั้งหน้า</string>
<string name="disable_file_removed">โมดูลจะถูกปิดใช้งานในการรีบู๊ตครั้งหน้า</string>
<string name="author">สร้างโดย %1$s</string>
<string name="reboot_recovery">รีบู๊ตไปโหมดกู้คืน</string>
<string name="reboot_bootloader">รีบู๊ตไป Bootloader</string>
<string name="reboot_download">รีบู๊ตไป Download</string>
<!--Repo Fragment-->
<string name="update_available">มีการอัพเดต</string>
<string name="installed">ติดตั้งแล้ว</string>
<string name="not_installed">ไม่ได้ติดตั้ง</string>
<string name="updated_on">อัพเดตเมื่อ %1$s</string>
<string name="sorting_order">การเรียง</string>
<string name="sort_by_name">เรียงตามชื่อ</string>
<string name="sort_by_update">เรียงตามการอัพเดตล่าสุด</string>
<!--Log Fragment-->
<string name="menuSaveLog">เก็บบันทึก</string>
<string name="menuReload">รีโหลด</string>
<string name="menuClearLog">ล้างบันทึก</string>
<string name="logs_cleared">บันทึกถูกล้างแล้ว</string>
<string name="log_is_empty">บันทึกว่าง</string>
<!--About Activity-->
<string name="app_changelog">สิ่งที่เพิ่มใหม่</string>
<string name="translators">paphonb</string>
<string name="app_translators">ผู้แปล</string>
<!-- System Components, Notifications -->
<string name="update_channel">การอัพเดต Magisk</string>
<string name="progress_channel">สถานะ</string>
<string name="download_complete">ดาวน์โหลดสำเร็จ</string>
<string name="download_file_error">เกิดข้อผิดพลาดในการดาวน์โหลดไฟล์</string>
<string name="magisk_update_title">มีการอัพเดต Magisk!</string>
<string name="manager_update_title">มีการอัพเดต Magisk Manager!</string>
<!--Toasts, Dialogs-->
<string name="close">ปิด</string>
<string name="repo_install_title">ติดตั้ง %1$s</string>
<string name="repo_install_msg">ต้องการติดตั้ง %1$s ตอนนี้หรือไม่?</string>
<string name="download">ดาวน์โหลด</string>
<string name="reboot">รีบู๊ต</string>
<string name="settings_reboot_toast">รีบู๊ตเพื่อนำการตั้งค่าไปใช้</string>
<string name="release_notes">-้อมูลเพิ่มเติม</string>
<string name="repo_cache_cleared">แคช Repo ถูกล้างแล้ว</string>
<string name="internal_storage">ไฟล์ zip ถูกเก็บไว้ใน:\n[Internal Storage]%1$s</string>
<string name="manager_download_install">แตะเพื่อดาวน์โหลดและติดตั้ง</string>
<string name="dtbo_patched_title">แพตช์ DTBO เรียบร้อย!</string>
<string name="dtbo_patched_reboot">Magisk Manager ได้แพตช์ไฟล์ dtbo.img แล้ว โปรดรีบู๊ต</string>
<string name="flashing">กำลังแฟลช</string>
<string name="hide_manager_title">กำลังซ่อน Magisk Manager…</string>
<string name="hide_manager_fail_toast">การซ่อน Magisk Manager ล้มเหลว</string>
<string name="open_link_failed_toast">ไม่พบแอปพลิเคชันสำหรับเปิดลิ้งค์</string>
<string name="download_zip_only">ดาวน์โหลด Zip เท่านั้น</string>
<string name="patch_boot_file">แพตช์ไฟล์บู๊ต</string>
<string name="direct_install">การติดตั้งโดยตรง (แนะนำ)</string>
<string name="install_inactive_slot">ติดตั้งไปยัง Slot ที่ไม่ใช้งาน (หลังจาก OTA)</string>
<string name="warning">คำเตือน</string>
<string name="install_inactive_slot_msg">อุปกรณ์ของคุณจะถูกบังคับให้บู๊ตไป Slot ที่ไม่ใช่งานหลังจากรีบูต!\nใช้ตัวเลือกนี้หลังจาก OTA เสร็จเท่านั้น\nดำเนินการต่อ?</string>
<string name="select_method">เลือกวิธี</string>
<string name="boot_file_patch_msg">เลือกไฟล์บู๊ตจากโรงงานในรูปแบบ .img or .img.tar</string>
<string name="complete_uninstall">ถอนการติดตั้งแบบสมบูรณ์</string>
<string name="restore_img">กู้คืน Images</string>
<string name="restore_img_msg">กำลังกู้คืน…</string>
<string name="restore_done">การกู้คืนสำเร็จ!</string>
<string name="restore_fail">ไม่มีไฟล์แบ็คอัพ!</string>
<string name="proprietary_title">Download Proprietary Code</string>
<string name="proprietary_notice">Magisk Manager is FOSS and doesn\'t contain Google\'s proprietary SafetyNet API code.\n\nWill you allow Magisk Manager to download an extension (contains GoogleApiClient) for SafetyNet checks?</string>
<string name="setup_done">การตั้งค่าสำเร็จ</string>
<string name="setup_fail">การตั้งค่าล้มเหลว</string>
<string name="env_fix_title">ต้องมีการตั้งค่าเพิ่มเติม</string>
<string name="env_fix_msg">อุปกรณ์ของคุณต้องมีการตั้งค่าเพิ่มเติมเพื่อให้ Magisk สามารถทำงานได้ จะมีการดาวน์โหลดไฟล์ติดตั้ง Magisk ต้องการทำเลยหรือไม่?</string>
<string name="setup_title">การตั้งค่าเพิ่มเติม</string>
<string name="setup_msg">กำลังรันการตั้งค่า…</string>
<string name="downloading_toast">กำลังดาวน์โหลด %1$s</string>
<string name="no_rw_storage">ฟีเจอร์นี้จะไม่สามารถทำงานได้เมื่อไม่มีสิทธิการเขียนพื้นที่เก็บภายนอก</string>
<string name="dl_one_module">ดาวน์โหลดทีละโมดูลเท่านั้น</string>
<!--Settings Activity -->
<string name="settings_general_category">ทั่วไป</string>
<string name="settings_dark_theme_title">โหมดมืด</string>
<string name="settings_dark_theme_summary">เปิดใช้โหมดมืด</string>
<string name="settings_clear_cache_title">ล้างแคช Repo</string>
<string name="settings_clear_cache_summary">ล้างข้อมูล repo ออนไลน์ที่ถูกแคชไว้</string>
<string name="settings_hide_manager_title">ซ่อน Magisk Manager</string>
<string name="settings_hide_manager_summary">แพ็คเกจ Magisk Manager ด้วยชื่อที่ถูกสุ่ม</string>
<string name="settings_restore_manager_title">กู้คืน Magisk Manager</string>
<string name="settings_restore_manager_summary">กู้คืนชื่อเดิมของ Magisk Manager</string>
<string name="language">ภาษา</string>
<string name="system_default">(มาตรฐานระบบ)</string>
<string name="settings_update">การอัพเดต</string>
<string name="settings_check_update_title">ตรวจสอบการอัพเดต</string>
<string name="settings_check_update_summary">ตรวจสอบการอัพเดตเป็นระยะในพื้นหลัง</string>
<string name="settings_update_channel_title">ช่องทางการอัพเดต</string>
<string name="settings_update_stable">เสถียร</string>
<string name="settings_update_beta">เบต้า</string>
<string name="settings_update_custom">กำหนดเอง</string>
<string name="settings_update_custom_msg">ใส่ URL</string>
<string name="settings_boot_format_title">รูปแบบไฟล์แพตช์บู๊ต</string>
<string name="settings_boot_format_summary">เลือกรูปแบบสำหรับไฟล์แพตช์บู๊ต\nเลือก .img เพื่อใช้ในการแฟลชด้วย fastboot/โหมดดาวน์โหลด; เลือก .img.tar เพื่อใช้ในการแฟลชด้วย ODIN.</string>
<string name="settings_core_only_title">โหมดคอร์เท่านั้น</string>
<string name="settings_core_only_summary">ใช้งานฟีเจอร์หลักเท่านั้น MagiskSU และ MagiskHide จะถูกเปิดใช้งาน แต่โมดูลต่างๆจะไม่ถูกโหลด</string>
<string name="settings_magiskhide_summary">ซ่อน Magisk จากการตรวจสอบในหลากหลายรูปแบบ</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">การรองรับ Systemless hosts เพื่อแอพ Adblock ต่างๆ</string>
<string name="settings_hosts_toast">ทำการเพิ่มโมดูล systemless hosts แล้ว</string>
<string name="settings_su_app_adb">แอปและ ADB</string>
<string name="settings_su_app">แอปเท่านั้น</string>
<string name="settings_su_adb">ADB เท่านั้น</string>
<string name="settings_su_disable">ปิด</string>
<string name="settings_su_request_10">10 วินาที</string>
<string name="settings_su_request_15">15 วินาที</string>
<string name="settings_su_request_20">20 วินาที</string>
<string name="settings_su_request_30">30 วินาที</string>
<string name="settings_su_request_45">45 วินาที</string>
<string name="settings_su_request_60">60 วินาที</string>
<string name="superuser_access">การเข้าถึง Superuser</string>
<string name="auto_response">การตอบกลับ</string>
<string name="request_timeout">เวลาการขอใช้งาน</string>
<string name="superuser_notification">การแจ้งเตือน Superuser</string>
<string name="request_timeout_summary">%1$d วินาที</string>
<string name="settings_su_reauth_title">ขอสิทธิ์ใหม่หลังจากอัพเกรด</string>
<string name="settings_su_reauth_summary">ขอสิทธิ์ superuser ใหม่หลังจากแอปถูกอัพเกรด</string>
<string name="settings_su_fingerprint_title">ใช้การยืนยันลายนิ้วมือ</string>
<string name="settings_su_fingerprint_summary">ใช้ตัวแสกนลายนิ้วมือเพื่ออนุญาตารขอเข้าถึง superuser</string>
<string name="auth_fingerprint">ยืนยันลายนิ้วมือ</string>
<string name="multiuser_mode">โหมดผู้ใช้หลายคน</string>
<string name="settings_owner_only">เจ้าของอุปกรณ์เท่านั้น</string>
<string name="settings_owner_manage">จัดการโดยเจ้าของอุปกรณ์</string>
<string name="settings_user_independent">ตามผู้ใช้</string>
<string name="owner_only_summary">เฉพาะเจ้าของที่มีสิทธิ์การเข้าถึง root</string>
<string name="owner_manage_summary">เจ้าของสามารถจัดการสิทธิ์การเข้าถึง root</string>
<string name="user_indepenent_summary">ผู้ใช้แต่ละคนสามารถจัดการกฏของตนเอง</string>
<string name="mount_namespace_mode">Mount Namespace Mode</string>
<string name="settings_ns_global">Global Namespace</string>
<string name="settings_ns_requester">Inherit Namespace</string>
<string name="settings_ns_isolate">Isolated Namespace</string>
<string name="global_summary">All root sessions use the global mount namespace.</string>
<string name="requester_summary">Root sessions will inherit their requester\'s namespace.</string>
<string name="isolate_summary">Each root session will have its own isolated namespace.</string>
<string name="android_o_not_support">ไม่รองรับ Android 8.0 ขึ้นไป</string>
<string name="disable_fingerprint">ไม่มีลายนิ้วมือหรืออุปกรณ์แสกน</string>
<!--Superuser-->
<string name="su_request_title">การขอเข้าถึง Superuser</string>
<string name="deny_with_str">ปฏิเสธ %1$s</string>
<string name="deny">ปฏิเสธ</string>
<string name="prompt">ถาม</string>
<string name="grant">อนุญาต</string>
<string name="su_warning">จะให้การเข้าถึงอุปกรณ์ในทุกรูปแบบ กรุณาปฏิเสธหากคุณไม่มั่นใจ!</string>
<string name="forever">ตลอดกาล</string>
<string name="once">คั้งเดียว</string>
<string name="tenmin">10 นาที</string>
<string name="twentymin">20 นาที</string>
<string name="thirtymin">30 นาที</string>
<string name="sixtymin">60 นาที</string>
<string name="su_allow_toast">%1$s ถูกอนุญาตสิทธิ์ Superuser</string>
<string name="su_deny_toast">%1$s ถูกปฏิเสธสิทธิ์ Superuser</string>
<string name="no_apps_found">ไม่พบแอป</string>
<string name="su_snack_grant">สิทธิ์ Superuser ของ %1$s ถูกอนุญาต</string>
<string name="su_snack_deny">สิทธิ์ Superuser ของ %1$s ถูกปฏิเสธ</string>
<string name="su_snack_notif_on">การแจ้งเตือนของ %1$s ถูกเปิด</string>
<string name="su_snack_notif_off">การแจ้งเตือนของ %1$s ถูกปิด</string>
<string name="su_snack_log_on">การบันทึก %1$s ถูกเปิด</string>
<string name="su_snack_log_off">การบันทึก %1$s ถูกปิด</string>
<string name="su_snack_revoke">สิทธิ์ของ %1$s ถูกลบ</string>
<string name="su_revoke_title">ลบสิทธิ์?</string>
<string name="su_revoke_msg">ยืนยันการลบสิทธิ์ของ %1$s?</string>
<string name="toast">การเตือน</string>
<string name="none">ไม่มี</string>
<string name="auth_fail">การยืนยันล้มเหลว</string>
<!--Superuser logs-->
<string name="target_uid">UID เป้าหมาย: %1$d</string>
<string name="command">คำสั่ง: %1$s</string>
</resources>

View File

@@ -1,216 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Modüller</string>
<string name="downloads">İndir</string>
<string name="superuser">Yetkili kullanıcı</string>
<string name="log">Günlük</string>
<string name="settings">Ayarlar</string>
<string name="install">Yükle</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk yüklü değil</string>
<string name="checking_for_updates">Güncelleştirmeler denetleniyor…</string>
<string name="invalid_update_channel">Geçersiz Güncelleme Kanalı</string>
<string name="safetyNet_check_text">SafetyNet kontrolünü başlatmak için dokunun</string>
<string name="checking_safetyNet_status">SafetyNet durumu kontrol ediliyor…</string>
<string name="safetyNet_check_success">SafetyNet Kontrolü Başarılı</string>
<string name="safetyNet_api_error">SafetyNet API Hatası</string>
<string name="safetyNet_res_invalid">Yanıt geçersiz</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Gelişmiş Ayarlar</string>
<string name="keep_force_encryption">Şifrelemeyi zorlamayı sürdür</string>
<string name="keep_dm_verity">AVB 2.0/dm-verity\'yi koru</string>
<string name="current_installed">Yüklü: %1$s</string>
<string name="latest_version">Yeni: %1$s</string>
<string name="uninstall">Kaldır</string>
<string name="uninstall_magisk_title">"Magisk\'i kaldır"</string>
<string name="uninstall_magisk_msg">Tüm modüller devre dışı bırakılacak/kaldırılacaktır. Kök erişimi kaldırılacak ve verileriniz şu anda şifrelenmemişse potansiyel olarak verileriniz şifrelenecek</string>
<string name="update">Güncelle</string>
<!--Module Fragment-->
<string name="no_info_provided">(Hiçbir açıklama sağlanmadı)</string>
<string name="no_modules_found">Modül yok</string>
<string name="update_file_created">Modül sonraki yeniden başlatmada güncellenecek</string>
<string name="remove_file_created">Modül sonraki yeniden başlatmada kaldırılacak</string>
<string name="remove_file_deleted">Modül sonraki yeniden başlatmada kaldırılmayacak</string>
<string name="disable_file_created">Modül sonraki yeniden başlatmada devre dışı bırakılacak</string>
<string name="disable_file_removed">Modül sonraki yeniden başlatmada etkinleştirilecek</string>
<string name="author">Yapımcı: %1$s</string>
<string name="reboot_recovery">Kurtarma modunda yeniden başlat</string>
<string name="reboot_bootloader">Ön yükleyici modunda yeniden başlat</string>
<string name="reboot_download">Yükleme modunda yeniden başlat</string>
<!--Repo Fragment-->
<string name="update_available">Güncelleme Mevcut</string>
<string name="installed">Yüklenmiş</string>
<string name="not_installed">Yüklenmemiş</string>
<string name="updated_on">Güncelleme: %1$s</string>
<string name="sorting_order">Sıralama Düzeni</string>
<string name="sort_by_name">İsme göre sırala</string>
<string name="sort_by_update">Son güncellemeye göre sırala</string>
<!--Log Fragment-->
<string name="menuSaveLog">Günlüğü kaydet</string>
<string name="menuReload">Yenile</string>
<string name="menuClearLog">Günlüğü temizle</string>
<string name="logs_cleared">Günlük başarıyla temizlendi</string>
<string name="log_is_empty">Günlük boş</string>
<!--About Activity-->
<string name="app_changelog">Uygulama değişiklikleri</string>
<string name="translators">Fatih FIRINCI - Mevlüt TOPÇU - Muhammet Emin TURGUT</string>
<string name="app_translators">Çevirmenler</string>
<!-- System Components, Notifications -->
<string name="update_channel">Magisk Güncellemeleri</string>
<string name="progress_channel">İlerleme Bildirimleri</string>
<string name="download_complete">İndirme tamamlandı</string>
<string name="download_file_error">Dosya indirme hatası</string>
<string name="magisk_update_title">Yeni Magisk Güncellemesi Mevcut!</string>
<string name="manager_update_title">Yeni Magisk Manager Güncellemesi Mevcut!</string>
<!--Toasts, Dialogs-->
<string name="close">Kapat</string>
<string name="repo_install_title">%1$s yükle</string>
<string name="repo_install_msg">%1$s yüklensin mi?</string>
<string name="download">İndir</string>
<string name="reboot">Yeniden başlat</string>
<string name="settings_reboot_toast">Ayarları uygulamak için yeniden başlatın</string>
<string name="release_notes">Sürüm notları</string>
<string name="repo_cache_cleared">Repo önbelleği temizlendi</string>
<string name="internal_storage">Zip şuraya depolandı:\n[Dahili Hafıza]%1$s</string>
<string name="manager_download_install">İndirmek ve yüklemek için dokunun</string>
<string name="dtbo_patched_title">DTBO yamalandı!</string>
<string name="dtbo_patched_reboot">Magisk Manager dtbo.img\'yi yamaladı, lütfen yeniden başlatın</string>
<string name="flashing">Yükleniyor</string>
<string name="hide_manager_title">Magisk Manager Gizleniyor…</string>
<string name="hide_manager_fail_toast">Magisk Manager\'ı Gizleme başarısız oldu…</string>
<string name="open_link_failed_toast">Bağlantıyı açabilecek uygulama bulunamadı</string>
<string name="download_zip_only">Yalnızca Zip Dosyasını İndir</string>
<string name="patch_boot_file">Önyükleme İmaj Dosyasını Yamala</string>
<string name="direct_install">Doğrudan Yükle (Önerilen)</string>
<string name="install_inactive_slot">Pasif yuvaya yükle (OTA\'dan sonra)</string>
<string name="warning">Uyarı</string>
<string name="install_inactive_slot_msg">Cihazınız yeniden başlatıldıktan sonra mevcut pasif yuvaya ZORLA önyüklenecek!\nBu seçeneği yalnızca OTA tamamlandıktan sonra kullanın.\nDevam mı?</string>
<string name="select_method">Yöntem Seçin</string>
<string name="boot_file_patch_msg">.img veya .img.tar formatında stok önyükleme imajını seçin</string>
<string name="complete_uninstall">Tamamen Kaldır</string>
<string name="restore_img">Önyükleme İmajını Geri Yükle</string>
<string name="restore_img_msg">Geri Yükleniyor…</string>
<string name="restore_done">Yenileme tamamlandı!</string>
<string name="restore_fail">Stok önyükleme yedeği yok!</string>
<string name="proprietary_title">Tescil Kodunu İndirin</string>
<string name="proprietary_notice">Magisk Yöneticisi, FOSS olduğundan Google\'ın tescilli olduğu SafetyNet API kodunu içermez.\n\nMagisk Manager\'ın SafetyNet kontrolü için bir uzantıyı (GoogleApiClient içeriyor) indirmesine izin veriyor musunuz?</string>
<string name="setup_done">Kurulum tamamlandı</string>
<string name="setup_fail">Kurulum başarısız</string>
<string name="env_fix_title">Ek Kurulum Gerekli</string>
   <string name="env_fix_msg">Cihazınızın Magisk\'in düzgün çalışması için ek kuruluma ihtiyacı var. Bu Magisk kurulum zip dosyasını indirecektir, şimdi devam etmek istiyor musunuz?</string>
<string name="setup_title">Ek Kurulum</string>
<string name="setup_msg">Ortam kurulumu çalışıyor…</string>
<string name="downloading_toast">%1$s indiriliyor</string>
<string name="no_rw_storage">Bu özellik harici depolamaya yazma izni olmadan çalışmaz.</string>
<!--Settings Activity -->
<string name="settings_general_category">Genel</string>
<string name="settings_dark_theme_title">Karanlık Tema</string>
<string name="settings_dark_theme_summary">Karanlık temayı etkinleştir</string>
<string name="settings_clear_cache_title">Repo Önbelleğini Temizle</string>
<string name="settings_clear_cache_summary">Çevrimiçi repolar için önbellek bilgilerini temizle, uygulamayı çevrimiçi yenilemeye zorla</string>
<string name="settings_hide_manager_title">Magisk Manager\'ı Gizle</string>
<string name="settings_hide_manager_summary">Rastgele paket adı ile Magisk Manager\'ı yeniden paketle</string>
<string name="settings_restore_manager_title">Magisk Manager\'ı Geri Yükle</string>
<string name="settings_restore_manager_summary">Orijinal paket adı ile Magisk Manager\'ı geri yükle</string>
<string name="language">Dil</string>
<string name="system_default">(Sistem Varsayılanı)</string>
<string name="settings_update">Güncelleme Ayarları</string>
<string name="settings_check_update_title">Güncellemeleri denetle</string>
   <string name="settings_check_update_summary">Düzenli aralıklarla arka planda güncellemeleri denetle</string>
<string name="settings_update_channel_title">Güncelleme Kanalı</string>
<string name="settings_update_stable">Kararlı</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Özel</string>
<string name="settings_update_custom_msg">Özel bir URL ekleyin</string>
<string name="settings_boot_format_title">Yamalı Önyükleme Formatı</string>
<string name="settings_boot_format_summary">Yamalı önyükleme imaj dosyasının formatını seçin\nFastboot/download modunda yüklemek için .img seçeneğini seçin; ODIN ile yüklemek için .img.tar\'ı seçin.</string>
<string name="settings_core_only_title">Magisk Sadece Çekirdek Modu</string>
<string name="settings_core_only_summary">Sadece temel özellikleri etkinleştirin, tüm modüller yüklenmez. MagiskSU ve MagiskHide yine de etkinleştirilecektir</string>
<string name="settings_magiskhide_summary">"Magisk\'i çeşitli algılamalardan gizle"</string>
<string name="settings_hosts_title">Sistemsiz host</string>
<string name="settings_hosts_summary">Reklam engelleme uygulamaları için sistemsiz host desteği</string>
<string name="settings_hosts_toast">Sistemsiz host modülü eklendi</string>
<string name="settings_su_app_adb">Uygulamalar ve ADB</string>
<string name="settings_su_app">Sadece uygulamalar</string>
<string name="settings_su_adb">Sadece ADB</string>
<string name="settings_su_disable">Devre dışı</string>
<string name="settings_su_request_10">10 saniye</string>
<string name="settings_su_request_15">15 saniye</string>
<string name="settings_su_request_20">20 saniye</string>
<string name="settings_su_request_30">30 saniye</string>
<string name="settings_su_request_45">45 saniye</string>
<string name="settings_su_request_60">60 saniye</string>
<string name="superuser_access">Yetkili Kullanıcı Erişimi</string>
<string name="auto_response">Otomatik Yanıt</string>
<string name="request_timeout">İstek Zaman Aşımı</string>
<string name="superuser_notification">Yetkili Kullanıcı Bildirimi</string>
<string name="request_timeout_summary">%1$d saniye</string>
<string name="settings_su_reauth_title">Yükseltmeden sonra yeniden kimlik doğrula</string>
<string name="settings_su_reauth_summary">Uygulama yükseltmeleri sonrasında yetkili kullanıcı izinlerini yeniden doğrula</string>
<string name="settings_su_fingerprint_title">Parmak İzi Kimlik Doğrulamayı Etkinleştir</string>
<string name="settings_su_fingerprint_summary">Yetkili kullanıcı isteklerine izin vermek için parmak izi tarayıcısını kullan</string>
<string name="auth_fingerprint">Parmak izini doğrula</string>
<string name="multiuser_mode">Çok Kullanıcılı Mod</string>
<string name="settings_owner_only">Yalnızca Cihaz Sahibi</string>
<string name="settings_owner_manage">Cihaz Sahibi Tarafından Yönetilen</string>
<string name="settings_user_independent">Bağımsız Kullanıcı</string>
<string name="owner_only_summary">Yalnızca kök erişimi olan kullanıcı</string>
<string name="owner_manage_summary">Yalnızca cihaz sahibi kök erişimini yönetebilir ve izin isteklerini alabilir</string>
<string name="user_indepenent_summary">Her kullanıcının kendi ayrı kök erişimi kuralları vardır</string>
<string name="mount_namespace_mode">Ad Alanı Modunu Doldur</string>
<string name="settings_ns_global">Global Ad Alanı</string>
<string name="settings_ns_requester">Inherit Ad Alanı</string>
<string name="settings_ns_isolate">Isolated Ad Alanı</string>
<string name="global_summary">Tüm kök oturumları genel bağlama ad alanını kullanır</string>
<string name="requester_summary">Kök oturumları, istekte bulunanın ad alanını devralır</string>
<string name="isolate_summary">Her bir kök oturumunun kendi izole ad alanı olacaktır</string>
<string name="android_o_not_support">Android 8.0 ve üzerinde desteklenmiyor</string>
<string name="disable_fingerprint">Parmak izi ayarlanmadı veya cihaz desteği yok</string>
<!--Superuser-->
<string name="su_request_title">Yetkili Kullanıcı İsteği</string>
<string name="deny_with_str">Reddet%1$s</string>
<string name="deny">Reddet</string>
<string name="prompt">Sor</string>
<string name="grant">İzin ver</string>
<string name="su_warning">Cihazınıza tam erişim izni verir.\nEmin değilseniz, reddedin!</string>
<string name="forever">Daima</string>
<string name="once">Bir kere</string>
   <string name="tenmin">10 dakika</string>
   <string name="twentymin">20 dakika</string>
   <string name="thirtymin">30 dakika</string>
   <string name="sixtymin">60 dakika</string>
<string name="su_allow_toast">%1$s için yetkili kullanıcı hakları verildi</string>
<string name="su_deny_toast">%1$s için yetkili kullanıcı hakları reddedildi</string>
<string name="no_apps_found">Hiçbir uygulama bulunamadı</string>
<string name="su_snack_grant">%1$s için yetkili kullanıcı hakları verildi</string>
<string name="su_snack_deny">%1$s için yetkili kullanıcı hakları reddedildi</string>
<string name="su_snack_notif_on">%1$s için bildirimler etkin</string>
<string name="su_snack_notif_off">%1$s için bildirimler devre dışı</string>
<string name="su_snack_log_on">%1$s için günlük etkin</string>
<string name="su_snack_log_off">%1$s için günlük devre dışı</string>
<string name="su_snack_revoke">%1$s hakları geri alındı</string>
<string name="su_revoke_title">Geri alınsın mı?</string>
<string name="su_revoke_msg">%1$s hakları geri alınsın mı?</string>
<string name="toast">Pencere</string>
<string name="none">Hiçbiri</string>
<string name="auth_fail">Kimlik Doğrulama Başarısız</string>
<!--Superuser logs-->
<string name="target_uid">Hedef UID: %1$d</string>
<string name="command">Komut: %1$s</string>
</resources>

View File

@@ -1,223 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Модулі</string>
<string name="downloads">Завантаження</string>
<string name="superuser">Суперкористувач</string>
<string name="log">Журнал</string>
<string name="settings">Налаштування</string>
<string name="install">Встановлення</string>
<string name="unsupport_magisk_title">Версія Magisk не підтримується</string>
<string name="unsupport_magisk_message">Ця версія Magisk Manager не підтримує версію Magisk нижчу, ніж v18.0.\n\nВи можете або вручну оновити Magisk, або понизити програму до старішої версії.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk не встановлено.</string>
<string name="checking_for_updates">Перевірка оновлень…</string>
<string name="invalid_update_channel">Неправильний канал оновлень</string>
<string name="safetyNet_check_text">Перевірити статус SafetyNet</string>
<string name="checking_safetyNet_status">Перевірка статусу SafetyNet…</string>
<string name="safetyNet_check_success">Результат перевірки SafetyNet</string>
<string name="safetyNet_api_error">Помилка в API SafetyNet</string>
<string name="safetyNet_res_invalid">Невірна відповідь.</string>
<string name="magisk_up_to_date">Magisk останньої версії</string>
<string name="manager_up_to_date">Magisk Manager останньої версії</string>
<string name="advanced_settings_title">Розширені налаштування</string>
<string name="keep_force_encryption">Залишити примусове шифрування</string>
<string name="keep_dm_verity">Залишити AVB 2.0/dm-verity</string>
<string name="current_installed">Поточна: %1$s</string>
<string name="latest_version">Найновіша: %1$s</string>
<string name="uninstall">Видалити</string>
<string name="uninstall_magisk_title">Видалити Magisk</string>
<string name="uninstall_magisk_msg">Ця дія призведе до видалення всіх модулів, MagiskSU, і може зашифрувати дані, якщо вони не зашифровані.\nВпевнені, що бажаєте продовжити?</string>
<string name="update">Оновити</string>
<string name="core_only_enabled">(увімкнено режим ядра)</string>
<!--Module Fragment-->
<string name="no_info_provided">(немає наданої інформації)</string>
<string name="no_modules_found">Модулів не знайдено.</string>
<string name="update_file_created">Модуль оновиться при перезавантаженні.</string>
<string name="remove_file_created">Модуль видалиться при перезавантаженні.</string>
<string name="remove_file_deleted">Модуль не видалиться при перезавантаженні.</string>
<string name="disable_file_created">Модуль вимкнеться при перезавантаженні.</string>
<string name="disable_file_removed">Модуль увімкнеться при перезавантаженні.</string>
<string name="author">Автор: %1$s</string>
<string name="reboot_recovery">Перезавантажити в Recovery</string>
<string name="reboot_bootloader">Перезавантажити в Bootloader</string>
<string name="reboot_download">Перезавантажити в Download</string>
<!--Repo Fragment-->
<string name="update_available">Доступне оновлення</string>
<string name="installed">Встановлено</string>
<string name="not_installed">Не встановлено</string>
<string name="updated_on">Оновлено: %1$s</string>
<string name="sorting_order">Порядок сортування</string>
<string name="sort_by_name">Сортувати за назвою</string>
<string name="sort_by_update">Сортувати за оновленням</string>
<!--Log Fragment-->
<string name="menuSaveLog">Зберегти журнал</string>
<string name="menuReload">Оновити</string>
<string name="menuClearLog">Очистити журнал</string>
<string name="logs_cleared">Журнал успішно очищено.</string>
<string name="log_is_empty">Журнал пустий.</string>
<!--About Activity-->
<string name="app_changelog">Перелік змін</string>
<string name="translators">tarasyyyk</string>
<string name="app_translators">Перекладачі</string>
<!-- System Components, Notifications -->
<string name="update_channel">Оновлення Magisk</string>
<string name="progress_channel">Сповіщення прогресу</string>
<string name="download_complete">Завантаження завершено</string>
<string name="download_file_error">Помилка завантаження файлу</string>
<string name="magisk_update_title">Доступне оновлення Magisk!</string>
<string name="manager_update_title">Доступне оновлення Magisk Manager!</string>
<!--Toasts, Dialogs-->
<string name="close">Закрити</string>
<string name="repo_install_title">Встановити %1$s</string>
<string name="repo_install_msg">Бажаєте встановити %1$s ?</string>
<string name="download">Завантажити</string>
<string name="reboot">Перезавантажити</string>
<string name="settings_reboot_toast">Для застосування змін перезавантажте пристрій.</string>
<string name="release_notes">Особливості версії</string>
<string name="repo_cache_cleared">Кеш репозиторію очищено</string>
<string name="internal_storage">Архів розташований:\n[Внутрішнє Сховище]%1$s</string>
<string name="manager_download_install">Натисніть, щоб завантажити і встановити.</string>
<string name="dtbo_patched_title">DTBO пропатчено!</string>
<string name="dtbo_patched_reboot">Magisk Manager пропатчив dtbo.img. Будь ласка, перезавантажте пристрій.</string>
<string name="flashing">Прошивання</string>
<string name="hide_manager_title">Приховування Magisk Manager…</string>
<string name="hide_manager_fail_toast">Не вдалося приховати Magisk Manager…</string>
<string name="open_link_failed_toast">Не знайдено програм для відкриття посилання…</string>
<string name="download_zip_only">Тільки завантажити</string>
<string name="patch_boot_file">Пропатчити boot образ</string>
<string name="direct_install">Пряме встановлення (рекомендовано)</string>
<string name="install_inactive_slot">Встановити в неактивний слот (після OTA)</string>
<string name="warning">Попередження</string>
<string name="install_inactive_slot_msg">Ваш пристрій буде примусово перезавантажено в неактивний слот!\nВикористовуйте цю опцію тільки для встановлення OTA.\nПродовжити?</string>
<string name="select_method">Виберіть спосіб</string>
<string name="boot_file_patch_msg">Виберіть оригінальний дамп boot образу в форматі .img чи .img.tar.</string>
<string name="complete_uninstall">Видалення виконано</string>
<string name="restore_img">Відновити образи</string>
<string name="restore_img_msg">Відновлення…</string>
<string name="restore_done">Відновлення завершено!</string>
<string name="restore_fail">Немає резервної копії оригінального boot образу</string>
<string name="proprietary_title">Завантажити пропрієтарний код</string>
<string name="proprietary_notice">Magisk Manager — це безкоштовна програма з відкритим вихідним кодом, тому вона не містить пропрієтарний код API SafetyNet від компанії Google.\n\nДозволити Magisk Manager завантажити розширення (яке містить GoogleApiClient) для перевірки SafetyNet?</string>
<string name="setup_done">Налаштування завершено.</string>
<string name="setup_fail">Не вдалося налаштувати.</string>
<string name="env_fix_title">Потрібне додаткове налаштування</string>
<string name="env_fix_msg">Для правильної роботи Magisk, потрібне додаткове налаштування вашого пристрою. Буде завантажено zip-архів. Розпочати негайно?</string>
<string name="setup_title">Додаткове налаштування</string>
<string name="setup_msg">Налаштування робочого середовища…</string>
<string name="downloading_toast">Завантаження %1$s</string>
<string name="no_rw_storage">Ця функція не працюватиме без дозволу на запис у Внутрішнє сховище</string>
<string name="dl_one_module">Завантажувати один модуль на раз.</string>
<!--Settings Activity -->
<string name="settings_general_category">Основні</string>
<string name="settings_dark_theme_title">Темна тема</string>
<string name="settings_dark_theme_summary">Увімкнути темне оформлення.</string>
<string name="settings_clear_cache_title">Очищення кешу</string>
<string name="settings_clear_cache_summary">Очистити збережену інформацію про мережеві репозиторії. Це змусить програму примусово оновлюватися через Інтернет.</string>
<string name="settings_hide_manager_title">Приховати Magisk Manager</string>
<string name="settings_hide_manager_summary">Перезібрати Magisk Manager з випадковим іменем пакету.</string>
<string name="settings_restore_manager_title">Відновити Magisk Manager</string>
<string name="settings_restore_manager_summary">Відновити Magisk Manager з оригінального пакету</string>
<string name="language">Мова</string>
<string name="system_default">Стандартна (системна)</string>
<string name="settings_update">Налаштування оновлень</string>
<string name="settings_check_update_title">Перевіряти оновлення</string>
<string name="settings_check_update_summary">Періодично перевіряти оновлення у фоновому режимі.</string>
<string name="settings_update_channel_title">Канал оновлення</string>
<string name="settings_update_stable">Стабільний реліз</string>
<string name="settings_update_beta">Бета реліз</string>
<string name="settings_update_custom">Власний</string>
<string name="settings_update_custom_msg">Вставте власний URL</string>
<string name="settings_boot_format_title">Формат пропатченого образу</string>
<string name="settings_boot_format_summary">Виберіть формат для вихідного пропатченого boot образу.\n.img - для прошивання через fastboot/download режим;\n.img.tar - для прошивання через ODIN.</string>
<string name="settings_core_only_title">Режим ядра Magisk</string>
<string name="settings_core_only_summary">Увімкнути тільки можливості ядра. MagiskSU i Magisk Hide залишуться увімкненими, проте ніякі модулі не будуть завантажені.</string>
<string name="settings_magiskhide_summary">Приховати Magisk від різних форм виявлень.</string>
<string name="settings_hosts_title">Позасистемні хости</string>
<string name="settings_hosts_summary">Підтримка позасистемних хостів для програм блокування реклами.</string>
<string name="settings_hosts_toast">Додано модуль позасистемних хостів</string>
<string name="settings_su_app_adb">Програми і ADB</string>
<string name="settings_su_app">Програми</string>
<string name="settings_su_adb">ADB</string>
<string name="settings_su_disable">Вимкнено</string>
<string name="settings_su_request_10">10 секунд</string>
<string name="settings_su_request_15">15 секунд</string>
<string name="settings_su_request_20">20 секунд</string>
<string name="settings_su_request_30">30 секунд</string>
<string name="settings_su_request_45">45 секунд</string>
<string name="settings_su_request_60">60 секунд</string>
<string name="superuser_access">Доступ суперкористувача</string>
<string name="auto_response">Автоматична відповідь</string>
<string name="request_timeout">Час запиту</string>
<string name="superuser_notification">Сповіщення суперкористувача</string>
<string name="request_timeout_summary">%1$d сек.</string>
<string name="settings_su_reauth_title">Повторна автентифікація</string>
<string name="settings_su_reauth_summary">Перевидача прав суперкористувача після оновлення програм</string>
<string name="settings_su_fingerprint_title">Автентифікація за відбитком</string>
<string name="settings_su_fingerprint_summary">Використовувати сканер відбитків пальців, щоб надавати дозвіл суперкористувача</string>
<string name="auth_fingerprint">Автентифікація за відбитком</string>
<string name="multiuser_mode">Багатокористувацький режим</string>
<string name="settings_owner_only">Тільки власник</string>
<string name="settings_owner_manage">Регулювання власником</string>
<string name="settings_user_independent">Незалежний користувач</string>
<string name="owner_only_summary">Тільки власник має root-доступ.</string>
<string name="owner_manage_summary">Тільки власник може керувати root-доступом і опрацьовувати запити на надання доступу.</string>
<string name="user_indepenent_summary">Кожен користувач має власні правила root-доступу.</string>
<string name="mount_namespace_mode">Режим монтування простору імен</string>
<string name="settings_ns_global">Глобальний простір імен</string>
<string name="settings_ns_requester">Наслідуваний простір імен</string>
<string name="settings_ns_isolate">Ізольований простір імен</string>
<string name="global_summary">Всі сеанси Суперкористувача використовують глобальний простір імен.</string>
<string name="requester_summary">Сеанси Суперкористувача наслідують простір імен запитувача.</string>
<string name="isolate_summary">Кожнен сеанс Суперкористувача має власний ізольований простір імен.</string>
<string name="android_o_not_support">Не працює на Android 8.0+.</string>
<string name="disable_fingerprint">Немає відбитків пальця або пристрій не підтримується.</string>
<!--Superuser-->
<string name="su_request_title">Запит прав Суперкористувача</string>
<string name="deny_with_str">Відмовити %1$s</string>
<string name="deny">Відмовити</string>
<string name="prompt">Запитувати</string>
<string name="grant">Надати</string>
<string name="su_warning">Надати повний доступ до пристрою.\nЯкщо не впевнені, що бажаєте продовжити, відхиліть дану дію.</string>
<string name="forever">Назавжди</string>
<string name="once">Одноразово</string>
<string name="tenmin">10 хв.</string>
<string name="twentymin">20 хв.</string>
<string name="thirtymin">30 хв.</string>
<string name="sixtymin">60 хв.</string>
<string name="su_allow_toast">%1$s надані права Суперкористувача</string>
<string name="su_deny_toast">%1$s відмовлено в правах Суперкористувача</string>
<string name="no_apps_found">Програм не виявлено</string>
<string name="su_snack_grant">%1$s надані права Суперкористувача</string>
<string name="su_snack_deny">%1$s відмовлено в правах Суперкористувача</string>
<string name="su_snack_notif_on">Сповіщення для %1$s увімкнено</string>
<string name="su_snack_notif_off">Сповіщення для %1$s вимкнено</string>
<string name="su_snack_log_on">Журнал подій для %1$s увімкнено</string>
<string name="su_snack_log_off">Журнал подій для %1$s вимкнено</string>
<string name="su_snack_revoke">Права для %1$s відкликані</string>
<string name="su_revoke_title">Відкликати?</string>
<string name="su_revoke_msg">Підтвердити відкликання прав для %1$s?</string>
<string name="toast">Спливаюче сповіщення</string>
<string name="none">Ні</string>
<string name="auth_fail">Помилка автентифікації</string>
<!--Superuser logs-->
<string name="target_uid">Цільовий UID: %1$d</string>
<string name="command">Команда: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Показати системні програми</string>
</resources>

View File

@@ -1,208 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Mô-đun</string>
<string name="downloads">Tải xuống</string>
<string name="superuser">Superuser</string>
<string name="log">Nhật ký</string>
<string name="settings">Thiết lập</string>
<string name="install">Cài đặt</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk chưa được cài đặt</string>
<string name="checking_for_updates">Đang kiểm tra cập nhật…</string>
<string name="invalid_update_channel">Kênh cập nhật không hợp lệ</string>
<string name="safetyNet_check_text">Chạm để bắt đầu kiểm tra SafetyNet</string>
<string name="checking_safetyNet_status">Đang kiểm tra trạng thái SafetyNet…</string>
<string name="safetyNet_check_success">Kiểm tra SafetyNet thành công</string>
<string name="safetyNet_api_error">Lỗi SafetyNet API</string>
<string name="safetyNet_res_invalid">Phản hồi không hợp lệ.</string>
<!--Install Fragment-->
<string name="advanced_settings_title">Thiết lập nâng cao</string>
<string name="keep_force_encryption">Giữ bắt buộc mã hoá</string>
<string name="keep_dm_verity">Giữ AVB 2.0/dm-verity</string>
<string name="current_installed">Đã cài: %1$s</string>
<string name="latest_version">Mới nhất: %1$s</string>
<string name="uninstall">Gỡ bỏ</string>
<string name="uninstall_magisk_title">Gỡ bỏ Magisk</string>
<string name="uninstall_magisk_msg">Tất cả mô-đun sẽ bị vô hiệu/loại bỏ. Root sẽ bị loại bỏ và dữ liệu của bạn có thể bị mã hoá.</string>
<string name="update">Cập nhật</string>
<!--Module Fragment-->
<string name="no_info_provided">(Không có thông tin được cung cấp)</string>
<string name="no_modules_found">Không tìm thấy mô-đun</string>
<string name="update_file_created">Mô-đun sẽ được cập nhật ở lần khởi động lại kế tiếp</string>
<string name="remove_file_created">Mô-đun sẽ được xoá bỏ ở lần khởi động lại kế tiếp</string>
<string name="remove_file_deleted">Mô-đun sẽ không được xoá bỏ ở lần khởi động lại kế tiếp</string>
<string name="disable_file_created">Mô-đun sẽ bị vô hiệu ở lần khởi động lại kế tiếp</string>
<string name="disable_file_removed">Mô-đun sẽ được kích hoạt ở lần khởi động lại kế tiếp</string>
<string name="author">Tạo bởi %1$s</string>
<string name="reboot_recovery">Khởi động vào Recovery</string>
<string name="reboot_bootloader">Khởi động vào Bootloader</string>
<string name="reboot_download">Khởi động vào Download</string>
<!--Repo Fragment-->
<string name="update_available">Có cập nhật mới</string>
<string name="installed">Đã được cài đặt</string>
<string name="not_installed">Chưa được cài đặt</string>
<string name="updated_on">Cập nhật vào: %1$s</string>
<string name="sorting_order">Thứ tự sắp xếp</string>
<string name="sort_by_name">Sắp xếp theo tên</string>
<string name="sort_by_update">Sắp xếp theo cập nhật lần cuối</string>
<!--Log Fragment-->
<string name="menuSaveLog">Lưu nhật ký</string>
<string name="menuReload">Tải lại</string>
<string name="menuClearLog">Xoá nhật ký ngay</string>
<string name="logs_cleared">Đã xoá nhật ký thành công</string>
<string name="log_is_empty">Nhật ký trống</string>
<!--About Activity-->
<string name="app_changelog">Nhật ký thay đổi của ứng dụng</string>
<string name="translators">Nguyễn Thanh Tài (thanhtai2009), Nguyễn Trung Hậu (trunghau1712)</string>
<string name="app_translators">Người dịch ứng dụng</string>
<!--Toasts, Dialogs-->
<string name="close">Đóng</string>
<string name="repo_install_title">Cài đặt %1$s</string>
<string name="repo_install_msg">Bạn muốn cài đặt %1$s ?</string>
<string name="download">Tải xuống</string>
<string name="reboot">Khởi động lại</string>
<string name="magisk_update_title">Có cập nhật Magisk mới!</string>
<string name="settings_reboot_toast">Khởi động lại để áp dụng thiết lập</string>
<string name="release_notes">Thay đổi</string>
<string name="repo_cache_cleared">Đã xoá bộ đệm kho</string>
<string name="internal_storage">Tập tin zip được lưu vào:\n[Bộ nhớ trong]%1$s</string>
<string name="manager_update_title">Đã có bản cập nhật Magisk Manager mới!</string>
<string name="manager_download_install">Nhấn để tải xuống và cài đặt.</string>
<string name="dtbo_patched_title">DTBO đã được vá!</string>
<string name="dtbo_patched_reboot">Magisk Manager đã vá dtbo.img. Hãy khởi động lại.</string>
<string name="update_channel">Cập nhật Magisk</string>
<string name="flashing">Đang flash</string>
<string name="hide_manager_title">Ẩn Magisk Manager…</string>
<string name="hide_manager_fail_toast">Ẩn Magisk Manager thất bại.</string>
<string name="open_link_failed_toast">Không tìm thấy ứng dụng nào để mở liên kết.</string>
<string name="download_zip_only">Chỉ tải xuống tập tin zip</string>
<string name="patch_boot_file">Tập tin hình ảnh bản vá khởi động</string>
<string name="direct_install">Cài đặt trực tiếp (Được đề xuất)</string>
<string name="install_inactive_slot">Cài đặt vào vùng không hoạt động (Sau khi OTA)</string>
<string name="warning">Cảnh báo</string>
<string name="install_inactive_slot_msg">Thiết bị của bạn sẽ bắt buộc phải khởi động tới vị trí không hoạt động hiện tại sau khi khởi động lại!\nChỉ sử dụng tuỳ chọn này sau khi cập nhật OTA hoàn tất.\nMuốn tiếp tục?</string>
<string name="select_method">Chọn phương thức</string>
<string name="boot_file_patch_msg">Chọn kết xuất hình ảnh khởi động gốc theo định dạng .img hoặc .img.tar.</string>
<string name="complete_uninstall">Xác nhận gỡ bỏ</string>
<string name="restore_img">Khôi phục images</string>
<string name="restore_img_msg">Đang khôi phục…</string>
<string name="restore_done">Đã hoàn tất khôi phục!</string>
<string name="restore_fail">Sao lưu gốc không tồn tại!</string>
<string name="proprietary_title">Tải xuống mã độc quyền</string>
<string name="proprietary_notice">Magisk Manager là FOSS và không chứa mã SafetyNet API độc quyền của Google.\n\nBạn có cho phép Magisk Manager tải xuống tiện ích (có chứa GoogleApiClient) để kiểm tra SafetyNet không?</string>
<string name="setup_done">Thiết lập xong.</string>
<string name="setup_fail">Thiết lập thất bại.</string>
<string name="env_fix_title">Yêu cầu thiết lập bổ sung</string>
<string name="env_fix_msg">Thiết bị của bạn cần thiết lập bổ sung để Magisk hoạt động bình thường. Nó sẽ tải xuống tập tin zip để thiết lập Magisk, bạn có muốn tiếp tục không?</string>
<string name="setup_title">Thiết lập bổ sung</string>
<string name="setup_msg">Đang chạy thiết lập môi trường…</string>
<string name="download_file_error">Lỗi tải tập tin</string>
<string name="downloading_toast">Đang tải xuống %1$s</string>
<string name="no_rw_storage">Tính năng này không hoạt động nếu thiếu quyền ghi vào bộ nhớ ngoài.</string>
<!--Settings Activity -->
<string name="settings_general_category">Chung</string>
<string name="settings_dark_theme_title">Chủ đề tối</string>
<string name="settings_dark_theme_summary">Dùng chủ đề tối</string>
<string name="settings_clear_cache_title">Xoá bộ đệm kho</string>
<string name="settings_clear_cache_summary">Xoá thông tin được lưu trong bộ nhớ cache của các bản thử nghiệm trực tuyến. Điều này buộc ứng dụng phải làm mới trực tuyến.</string>
<string name="settings_hide_manager_title">Ẩn Magisk Manager</string>
<string name="settings_hide_manager_summary">Đóng gói lại Magisk Manager với tên gói ngẫu nhiên.</string>
<string name="settings_restore_manager_title">Khôi phục Magisk Manager</string>
<string name="settings_restore_manager_summary">Khôi phục Magisk Manager với gói ban đầu</string>
<string name="language">Ngôn ngữ</string>
<string name="system_default">(Mặc định hệ thống)</string>
<string name="settings_update">Cài đặt cập nhật</string>
<string name="settings_check_update_title">Kiểm tra cập nhật</string>
<string name="settings_check_update_summary">Định kỳ kiểm tra các bản cập nhật trong nền.</string>
<string name="settings_update_channel_title">Kênh cập nhật</string>
<string name="settings_update_stable">Ổn định</string>
<string name="settings_update_beta">Dùng thử</string>
<string name="settings_update_custom">Tuỳ chỉnh</string>
<string name="settings_update_custom_msg">Chèn URL tuỳ chỉnh</string>
<string name="settings_boot_format_title">Định dạng đầu ra được vá cố định</string>
<string name="settings_boot_format_summary">Chọn định dạng cho ảnh khởi động để vá đầu ra.\nChọn .img để flash qua chế độ fastboot/download; chọn .img.tar để flash với ODIN.</string>
<string name="settings_core_only_title">Chế độ chỉ lõi Magisk</string>
<string name="settings_core_only_summary">Chỉ bật các tính năng chính. MagiskSU và MagiskHide sẽ vẫn được kích hoạt, nhưng sẽ không có mô-đun nào được tải.</string>
<string name="settings_magiskhide_summary">Ẩn Magisk khỏi nhiều phương thức phát hiện</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts hỗ trợ các ứng dụng chặn quảng cáo</string>
<string name="settings_hosts_toast">Mô-đun được thêm vào systemless hosts</string>
<string name="settings_su_app_adb">Ứng dụng và ADB</string>
<string name="settings_su_app">Chỉ ứng dụng</string>
<string name="settings_su_adb">Chỉ ADB</string>
<string name="settings_su_disable">Đã vô hiệu</string>
<string name="settings_su_request_10">10 giây</string>
<string name="settings_su_request_15">15 giây</string>
<string name="settings_su_request_20">20 giây</string>
<string name="settings_su_request_30">30 giây</string>
<string name="settings_su_request_45">45 giây</string>
<string name="settings_su_request_60">60 giây</string>
<string name="superuser_access">Truy nhập Superuser</string>
<string name="auto_response">Tự phản hồi</string>
<string name="request_timeout">Thời gian chờ yêu cầu</string>
<string name="superuser_notification">Thông báo Superuser</string>
<string name="request_timeout_summary">%1$d giây</string>
<string name="settings_su_reauth_title">Xác thực lại sau khi nâng cấp</string>
<string name="settings_su_reauth_summary">Xác thực lại quyền superuser sau khi nâng cấp ứng dụng</string>
<string name="settings_su_fingerprint_title">Bật xác thực vân tay</string>
<string name="settings_su_fingerprint_summary">Sử dụng quét vân tay để cho phép quyền superuser</string>
<string name="auth_fingerprint">Xác thực vân tay</string>
<string name="multiuser_mode">Chế độ đa người dùng</string>
<string name="settings_owner_only">Chỉ chủ sở hữu thiết bị</string>
<string name="settings_owner_manage">Chủ sở hữu thiết bị được quản lý</string>
<string name="settings_user_independent">Người dùng độc lập</string>
<string name="owner_only_summary">Chỉ chủ sở hữu mới có quyền truy cập root.</string>
<string name="owner_manage_summary">Chỉ chủ sở hữu mới có thể quản lý quyền truy cập root và nhận lời nhắc yêu cầu.</string>
<string name="user_indepenent_summary">Mỗi người dùng có các quy tắc root riêng của mình.</string>
<string name="mount_namespace_mode">Chế độ không gian tên gắn kết</string>
<string name="settings_ns_global">Không gian tên chung</string>
<string name="settings_ns_requester">Không gian tên kế thừa</string>
<string name="settings_ns_isolate">Không gian tên độc lập</string>
<string name="global_summary">Tất cả các phiên root sử dụng không gian tên gắn kết chung.</string>
<string name="requester_summary">Các phiên root sẽ kế thừa không gian tên của người yêu cầu.</string>
<string name="isolate_summary">Mỗi phiên root sẽ có không gian tên riêng biệt.</string>
<string name="android_o_not_support">Không hỗ trợ Android 8.0+.</string>
<string name="disable_fingerprint">Không có dấu vân tay nào được thiết lập hoặc thiết bị không hỗ trợ.</string>
<!--Superuser-->
<string name="su_request_title">Yêu cầu Superuser</string>
<string name="deny_with_str">Từ chối%1$s</string>
<string name="deny">Từ chối</string>
<string name="prompt">Nhắc nhở</string>
<string name="grant">Cấp phép</string>
<string name="su_warning">Cấp toàn quyền truy cập thiết bị.\nTừ chối nếu bạn không chắc chắn!</string>
<string name="forever">Mãi mãi</string>
<string name="once">Một lần</string>
<string name="tenmin">10 phút</string>
<string name="twentymin">20 phút</string>
<string name="thirtymin">30 phút</string>
<string name="sixtymin">60 phút</string>
<string name="su_allow_toast">%1$s đã được cấp quyền Superuser</string>
<string name="su_deny_toast">Đã từ chối cấp quyền Superuser cho %1$s</string>
<string name="no_apps_found">Không tìm thấy ứng dụng</string>
<string name="su_snack_grant">Quyền Superuser của %1$s đã được cấp</string>
<string name="su_snack_deny">Quyền Superuser của %1$s đã bị từ chối</string>
<string name="su_snack_notif_on">Thông báo của %1$s đã được kích hoạt</string>
<string name="su_snack_notif_off">Thông báo của %1$s đã bị vô hiệu</string>
<string name="su_snack_log_on">Ghi nhận của %1$s đã được kích hoạt</string>
<string name="su_snack_log_off">Ghi nhận của %1$s đã bị vô hiệu</string>
<string name="su_snack_revoke">Quyền của %1$s đã được thu hồi</string>
<string name="su_revoke_title">Thu hồi?</string>
<string name="su_revoke_msg">Xác nhận thu hồi quyền của %1$s?</string>
<string name="toast">Thông báo ngắn</string>
<string name="none">Không có</string>
<string name="auth_fail">Xác thực thất bại</string>
<!--Superuser logs-->
<string name="target_uid">Mục UID: %1$d</string>
<string name="command">Điều khiển: %1$s</string>
</resources>

View File

@@ -1,223 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">模块</string>
<string name="downloads">下载</string>
<string name="superuser">超级用户</string>
<string name="log">日志</string>
<string name="settings">设置</string>
<string name="install">安装</string>
<string name="unsupport_magisk_title">不支持的 Magisk 版本</string>
<string name="unsupport_magisk_message">此版本的 Magisk Manager 不支持低于 v18.0 的 Magisk。\n\n请手动升级 Magisk或将应用降级到旧版本。</string>
<!--Status Fragment-->
<string name="magisk_version_error">未安装 Magisk</string>
<string name="checking_for_updates">正在检查更新…</string>
<string name="invalid_update_channel">无效的更新通道</string>
<string name="safetyNet_check_text">点按启动 SafetyNet 检查</string>
<string name="checking_safetyNet_status">正在检查 SafetyNet 状态…</string>
<string name="safetyNet_check_success">SafetyNet 检查完成</string>
<string name="safetyNet_api_error">SafetyNet API 错误</string>
<string name="safetyNet_res_invalid">回传值无效</string>
<string name="magisk_up_to_date">Magisk 已是最新版本</string>
<string name="manager_up_to_date">Magisk Manager 已是最新版本</string>
<string name="advanced_settings_title">安装选项</string>
<string name="keep_force_encryption">保持强制加密</string>
<string name="keep_dm_verity">保留 AVB 2.0/dm-verity</string>
<string name="current_installed">已安装:%1$s</string>
<string name="latest_version">最新:%1$s</string>
<string name="uninstall">卸载</string>
<string name="uninstall_magisk_title">卸载 Magisk</string>
<string name="uninstall_magisk_msg">所有模块将停用或删除Root 会被移除。未加密的设备重启时可能会被进行加密。</string>
<string name="update">更新</string>
<string name="core_only_enabled">(核心功能模式开启)</string>
<!--Module Fragment-->
<string name="no_info_provided">(未提供信息)</string>
<string name="no_modules_found">未找到模块</string>
<string name="update_file_created">模块将在下次重启后更新</string>
<string name="remove_file_created">模块将在下次重启后移除</string>
<string name="remove_file_deleted">模块不会在下次重启后移除</string>
<string name="disable_file_created">模块将在下次重启后禁用</string>
<string name="disable_file_removed">模块将在下次重启后启用</string>
<string name="author">作者:%1$s</string>
<string name="reboot_recovery">重启到 Recovery</string>
<string name="reboot_bootloader">重启到 Bootloader</string>
<string name="reboot_download">重启到 Download</string>
<!--Repo Fragment-->
<string name="update_available">可更新</string>
<string name="installed">已安装</string>
<string name="not_installed">未安装</string>
<string name="updated_on">更新于: %1$s</string>
<string name="sorting_order">排序方式</string>
<string name="sort_by_name">按名称排序</string>
<string name="sort_by_update">按更新时间排序</string>
<!--Log Fragment-->
<string name="menuSaveLog">保存日志</string>
<string name="menuReload">刷新</string>
<string name="menuClearLog">清除日志</string>
<string name="logs_cleared">日志已清除</string>
<string name="log_is_empty">日志为空</string>
<!--About Activity-->
<string name="app_changelog">应用更新日志</string>
<string name="translators">gh2923, vvb2060</string>
<string name="app_translators">翻译人员</string>
<!-- System Components, Notifications -->
<string name="update_channel">更新提示</string>
<string name="progress_channel">下载进度</string>
<string name="download_complete">下载完成</string>
<string name="download_file_error">下载文件时出错</string>
<string name="magisk_update_title">Magisk 可更新!</string>
<string name="manager_update_title">Magisk Manager 可更新!</string>
<!--Toasts, Dialogs-->
<string name="close">关闭</string>
<string name="repo_install_title">安装 %1$s</string>
<string name="repo_install_msg">是否立即安装 %1$s </string>
<string name="download">下载</string>
<string name="reboot">重启</string>
<string name="settings_reboot_toast">重启以应用设置</string>
<string name="release_notes">发布说明</string>
<string name="repo_cache_cleared">仓库缓存已清除</string>
<string name="internal_storage">Zip 已被储存到:\n[内部存储空间]%1$s</string>
<string name="manager_download_install">下载并安装</string>
<string name="dtbo_patched_title">已修补 DTBO!</string>
<string name="dtbo_patched_reboot">Magisk Manager 为 dtbo 分区进行了修补,请立即重新启动</string>
<string name="flashing">正在刷入</string>
<string name="hide_manager_title">正在隐藏 Magisk Manager…</string>
<string name="hide_manager_fail_toast">隐藏 Magisk Manager 失败</string>
<string name="open_link_failed_toast">找不到能够打开此链接的应用</string>
<string name="download_zip_only">仅下载 Zip</string>
<string name="patch_boot_file">修补 Boot 镜像文件</string>
<string name="direct_install">直接安装(推荐)</string>
<string name="install_inactive_slot">安装到未使用的槽位安装完OTA后</string>
<string name="warning">警告</string>
<string name="install_inactive_slot_msg">重启后,设备将被强制切换到另一个槽位!\n请在安装完 OTA 后再使用。\n是否继续</string>
<string name="select_method">选择安装方法</string>
<string name="boot_file_patch_msg">选择原厂 Boot 镜像备份;支持 .img 以及 .img.tar 格式</string>
<string name="complete_uninstall">完全卸载</string>
<string name="restore_img">还原原厂镜像</string>
<string name="restore_img_msg">还原中…</string>
<string name="restore_done">还原完成!</string>
<string name="restore_fail">原厂 Boot 镜像备份不存在!</string>
<string name="proprietary_title">下载专有代码</string>
<string name="proprietary_notice">Magisk Manager 是一个 100% 开源的应用,因此不会包含 Google 专有的 SafetyNet API 代码。\n\n允许 Magisk Manager 下载一个扩展(包含 GoogleApiClient用于 SafetyNet 检查吗?</string>
<string name="setup_done">安装完成</string>
<string name="setup_fail">安装失败</string>
<string name="env_fix_title">需要额外安装</string>
<string name="env_fix_msg">需要额外的安装才能使 Magisk 正常工作。 将下载 Magisk 安装包,是否继续?</string>
<string name="setup_title">额外安装</string>
<string name="setup_msg">运行环境安装中…</string>
<string name="downloading_toast">正在下载 %1$s</string>
<string name="no_rw_storage">未授予写入内置存储权限,此功能无法正常工作。</string>
<string name="dl_one_module">一次只能下载一个模块</string>
<!--Settings Activity -->
<string name="settings_general_category">常规</string>
<string name="settings_dark_theme_title">暗色主题</string>
<string name="settings_dark_theme_summary">使用暗色主题</string>
<string name="settings_clear_cache_title">清除仓库缓存</string>
<string name="settings_clear_cache_summary">清除已缓存的在线仓库信息,强制刷新在线数据</string>
<string name="settings_hide_manager_title">隐藏 Magisk Manager</string>
<string name="settings_hide_manager_summary">用随机包名重新安装 Magisk Manager</string>
<string name="settings_restore_manager_title">还原 Magisk Manager</string>
<string name="settings_restore_manager_summary">用原安装包还原 Magisk Manager</string>
<string name="language">语言</string>
<string name="system_default">(系统默认)</string>
<string name="settings_update">更新设定</string>
<string name="settings_check_update_title">检查更新</string>
<string name="settings_check_update_summary">在后台定期检查更新</string>
<string name="settings_update_channel_title">更新通道</string>
<string name="settings_update_stable">稳定版</string>
<string name="settings_update_beta">测试版</string>
<string name="settings_update_custom">自定义</string>
<string name="settings_update_custom_msg">请输入自定义网址</string>
<string name="settings_boot_format_title">已修补的 Boot 镜像输出格式</string>
<string name="settings_boot_format_summary">选择已修补的 Boot 镜像文件输出格式\n若要通过 fastboot/download 模式刷入,请选择 .img 格式;若要通过 Odin 刷入,则选择 .img.tar\n</string>
<string name="settings_core_only_title">Magisk 核心功能模式</string>
<string name="settings_core_only_summary">仅启用核心功能所有模块将不会被载入。MagiskSU 和 MagiskHide 仍会持续运作</string>
<string name="settings_magiskhide_summary">隐藏 Magisk 使其不被多种方法检测到</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">为广告屏蔽应用提供 Systemless hosts 支持</string>
<string name="settings_hosts_toast">已添加 systemless hosts 模块</string>
<string name="settings_su_app_adb">应用和 ADB</string>
<string name="settings_su_app">仅应用</string>
<string name="settings_su_adb">仅 ADB</string>
<string name="settings_su_disable">已禁用</string>
<string name="settings_su_request_10">10 秒</string>
<string name="settings_su_request_15">15 秒</string>
<string name="settings_su_request_20">20 秒</string>
<string name="settings_su_request_30">30 秒</string>
<string name="settings_su_request_45">45 秒</string>
<string name="settings_su_request_60">60 秒</string>
<string name="superuser_access">超级用户访问权限</string>
<string name="auto_response">自动响应</string>
<string name="request_timeout">请求超时</string>
<string name="superuser_notification">超级用户通知</string>
<string name="request_timeout_summary">%1$d 秒</string>
<string name="settings_su_reauth_title">更新后重新认证</string>
<string name="settings_su_reauth_summary">应用更新后重新认证超级用户权限</string>
<string name="settings_su_fingerprint_title">启用指纹验证</string>
<string name="settings_su_fingerprint_summary">使用指纹识别来允许超级用户请求</string>
<string name="auth_fingerprint">验证指纹</string>
<string name="multiuser_mode">多用户模式</string>
<string name="settings_owner_only">仅设备所有者</string>
<string name="settings_owner_manage">由设备所有者管理</string>
<string name="settings_user_independent">各用户独立</string>
<string name="owner_only_summary">仅设备所有者账户有超级用户权限</string>
<string name="owner_manage_summary">仅设备所有者账户能管理超级用户并接收权限请求提示</string>
<string name="user_indepenent_summary">每个用户有独立的权限规则</string>
<string name="mount_namespace_mode">挂载命名空间 模式</string>
<string name="settings_ns_global">全局命名空间</string>
<string name="settings_ns_requester">继承命名空间</string>
<string name="settings_ns_isolate">独立命名空间</string>
<string name="global_summary">所有的 ROOT 会话使用全局挂载命名空间</string>
<string name="requester_summary">ROOT 会话继承原程序的命名空间</string>
<string name="isolate_summary">每一个 ROOT 会话使用自己独立的命名空间</string>
<string name="android_o_not_support">不支持 Android 8.0+</string>
<string name="disable_fingerprint">没有设置指纹或设备不支持</string>
<!--Superuser-->
<string name="su_request_title">超级用户请求</string>
<string name="deny_with_str">拒绝 %1$s</string>
<string name="deny">拒绝</string>
<string name="prompt">提示</string>
<string name="grant">允许</string>
<string name="su_warning">将授予对该设备的最高权限。\n如果不确定请拒绝</string>
<string name="forever">永久</string>
<string name="once">一次</string>
<string name="tenmin">10 分钟</string>
<string name="twentymin">20 分钟</string>
<string name="thirtymin">30 分钟</string>
<string name="sixtymin">60 分钟</string>
<string name="su_allow_toast">%1$s 已被授予超级用户权限</string>
<string name="su_deny_toast">%1$s 已被拒绝超级用户权限</string>
<string name="no_apps_found">未找到应用</string>
<string name="su_snack_grant">已授予 %1$s 超级用户权限</string>
<string name="su_snack_deny">已拒绝 %1$s 超级用户权限</string>
<string name="su_snack_notif_on">已启用 %1$s 的通知</string>
<string name="su_snack_notif_off">已禁用 %1$s 的通知</string>
<string name="su_snack_log_on">已启用对 %1$s 的日志记录</string>
<string name="su_snack_log_off">已禁用对 %1$s 的日志记录</string>
<string name="su_snack_revoke">已撤销 %1$s 的权限</string>
<string name="su_revoke_title">撤销</string>
<string name="su_revoke_msg">确认撤销 %1$s 的权限?</string>
<string name="toast">消息提示</string>
<string name="none"></string>
<string name="auth_fail">验证失败</string>
<!--Superuser logs-->
<string name="target_uid">目标 UID: %1$d</string>
<string name="command">命令: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">显示系统应用</string>
</resources>

View File

@@ -1,221 +0,0 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">模組</string>
<string name="downloads">下載</string>
<string name="superuser">超級用戶</string>
<string name="log">日誌</string>
<string name="settings">設置</string>
<string name="install">安裝</string>
<!--Status Fragment-->
<string name="magisk_version_error">未安裝 Magisk</string>
<string name="checking_for_updates">正在檢查更新…</string>
<string name="safetyNet_check_text">點擊啟動 SafetyNet 檢查</string>
<string name="checking_safetyNet_status">正在檢查 SafetyNet 狀態…</string>
<!--Install Fragment-->
<string name="advanced_settings_title">高級設置</string>
<string name="keep_force_encryption">保持強制加密</string>
<string name="keep_dm_verity">保留 AVB 2.0/dm-verity</string>
<string name="current_installed">已安裝:%1$s</string>
<string name="latest_version">最新:%1$s</string>
<string name="uninstall">解除安裝</string>
<!--Module Fragment-->
<string name="no_info_provided">(未提供資訊)</string>
<string name="no_modules_found">未找到模組</string>
<string name="update_file_created">模組將在下次重啟後更新</string>
<string name="remove_file_created">模組將在下次重啟後移除</string>
<string name="remove_file_deleted">模組將不會在下次重啟後移除</string>
<string name="disable_file_created">模組將在下次重啟後禁用</string>
<string name="disable_file_removed">模組將在下次重啟後啟用</string>
<string name="author">作者:%1$s</string>
<!--Repo Fragment-->
<string name="update_available">可更新</string>
<string name="installed">已安裝</string>
<string name="not_installed">未安裝</string>
<!--Log Fragment-->
<string name="menuSaveLog">保存日誌</string>
<string name="menuReload">重載</string>
<string name="menuClearLog">清除日誌</string>
<string name="logs_cleared">日誌已成功清除</string>
<string name="log_is_empty">日誌為空</string>
<!--About Activity-->
<string name="app_changelog">應用更新日誌</string>
<string name="translators">topjohnwu</string>
<string name="app_translators">翻譯者</string>
<!--Toasts, Dialogs-->
<string name="repo_install_title">安裝 %1$s</string>
<string name="repo_install_msg">你想要安裝 %1$s 嗎?</string>
<string name="reboot">重啟</string>
<string name="magisk_update_title">Magisk 可更新!</string>
<string name="settings_reboot_toast">重啟以完成設定</string>
<string name="release_notes">發布說明</string>
<string name="repo_cache_cleared">資源庫暫存已清除</string>
<string name="download_file_error">下載文件時出錯</string>
<string name="downloading_toast">正在下載 %1$s</string>
<string name="no_rw_storage">未授予寫入外部存儲權限,此功能無法正常工作。</string>
<!--Settings Activity -->
<string name="settings_general_category">常規</string>
<string name="settings_dark_theme_title">深色主題</string>
<string name="settings_dark_theme_summary">使用深色主題</string>
<string name="settings_clear_cache_title">清除資源庫快取</string>
<string name="settings_clear_cache_summary">清除已暫存的在線資源庫快取,強制刷新在線數據</string>
<string name="settings_core_only_title">Magisk 核心功能模式</string>
<string name="settings_magiskhide_summary">隱藏 Magisk 使其不被多種方法檢測到</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">為廣告屏蔽應用提供 Systemless hosts 支持</string>
<string name="settings_su_app_adb">應用和 ADB</string>
<string name="settings_su_app">僅應用</string>
<string name="settings_su_adb">僅 ADB</string>
<string name="settings_su_disable">已禁用</string>
<string name="settings_su_request_10">10 秒</string>
<string name="settings_su_request_15">15 秒</string>
<string name="settings_su_request_20">20 秒</string>
<string name="settings_su_request_30">30 秒</string>
<string name="settings_su_request_45">45 秒</string>
<string name="settings_su_request_60">60 秒</string>
<string name="superuser_access">超級用戶訪問權限</string>
<string name="auto_response">自動回應</string>
<string name="request_timeout">請求逾時</string>
<string name="superuser_notification">超級用戶通知</string>
<string name="request_timeout_summary">%1$d 秒</string>
<!--Superuser-->
<string name="su_request_title">超級用戶請求</string>
<string name="deny_with_str">拒絕 %1$s</string>
<string name="deny">拒絕</string>
<string name="prompt">提示</string>
<string name="grant">允許</string>
<string name="su_warning">將授予對你設備的最高權限。\n如果你不確定請拒絕</string>
<string name="forever">永久</string>
<string name="once">一次</string>
<string name="tenmin">10 分鐘</string>
<string name="twentymin">20 分鐘</string>
<string name="thirtymin">30 分鐘</string>
<string name="sixtymin">60 分鐘</string>
<string name="su_allow_toast">%1$s 已被授予超級用戶權限</string>
<string name="su_deny_toast">%1$s 已被拒絕超級用戶權限</string>
<string name="no_apps_found">未找到應用</string>
<string name="su_snack_grant">已授予 %1$s 超級用戶權限</string>
<string name="su_snack_deny">已拒絕 %1$s 超級用戶權限</string>
<string name="su_snack_notif_on">已啟用 %1$s 的通知</string>
<string name="su_snack_notif_off">已禁用 %1$s 的通知</string>
<string name="su_snack_log_on">已啟用對 %1$s 的日誌記錄</string>
<string name="su_snack_log_off">已禁用對 %1$s 的日誌記錄</string>
<string name="su_snack_revoke">已撤銷 %1$s 的權限</string>
<string name="su_revoke_title">撤銷</string>
<string name="su_revoke_msg">確認撤銷 %1$s 的權限?</string>
<string name="toast">消息提示</string>
<string name="none"></string>
<!--Superuser logs-->
<string name="target_uid">目標 UID: %1$d</string>
<string name="command">指令: %1$s</string>
<string name="close">關閉</string>
<string name="internal_storage">Zip 已被儲存到:\n[內部儲存空間]%1$s</string>
<string name="download">下載</string>
<string name="uninstall_magisk_title">解除安裝 Magisk</string>
<string name="uninstall_magisk_msg">所有模組將會被停用 / 刪除。root會被移除並有可能在目前資料未加密的情況下被加密</string>
<string name="settings_core_only_summary">僅啟用核心功能所有模組將不會被載入。MagiskSU 和 MagiskHide 仍會持續運作</string>
<string name="safetyNet_check_success">SafetyNet 檢查成功</string>
<string name="safetyNet_res_invalid">回傳值無效</string>
<string name="multiuser_mode">多使用者設定</string>
<string name="owner_manage_summary">僅裝置擁有者帳戶能管理超級用戶權限並接收權限請求通知</string>
<string name="owner_only_summary">僅裝置擁有者帳戶有超級用戶權限</string>
<string name="user_indepenent_summary">每一位使用者有獨立的權限規則</string>
<string name="settings_user_independent">各使用者獨立</string>
<string name="settings_owner_only">僅裝置擁有者</string>
<string name="settings_owner_manage">由裝置擁有者管理</string>
<string name="manager_download_install">點擊以下載並安裝</string>
<string name="manager_update_title">有 Magisk Manager 更新!</string>
<string name="settings_su_reauth_summary">應用程式更新後重新認證root權限</string>
<string name="settings_su_reauth_title">更新後重新認證</string>
<string name="global_summary">所有 root 工作使用全域 mount namespace</string>
<string name="isolate_summary">每一 root 工作有自己獨立的 namespace</string>
<string name="mount_namespace_mode">掛載命名空間(Namespace)模式</string>
<string name="requester_summary">Root 工作繼承原程式之 namespace</string>
<string name="settings_ns_global">全域 Namespace</string>
<string name="settings_ns_isolate">獨立 Namespace</string>
<string name="settings_ns_requester">繼承 Namespace</string>
<string name="update">更新</string>
<string name="update_channel">Magisk 更新</string>
<string name="system_default">(系統預設)</string>
<string name="language">語言</string>
<string name="flashing">正在刷入</string>
<string name="hide_manager_title">正在隱藏 Magisk Manager…</string>
<string name="hide_manager_fail_toast">隱藏 Magisk Manager 失敗</string>
<string name="settings_hide_manager_title">隱藏 Magisk Manager</string>
<string name="settings_update_channel_title">更新頻道</string>
<string name="settings_update_stable">穩定版</string>
<string name="settings_update_beta">測試版</string>
<string name="download_zip_only">僅下載 Zip</string>
<string name="patch_boot_file">補丁 Boot 映像文件檔</string>
<string name="direct_install">直接安裝 (推薦)</string>
<string name="select_method">選擇安裝方法</string>
<string name="settings_update">更新設定</string>
<string name="settings_boot_format_title">已補丁 Boot 映像輸出格式</string>
<string name="settings_boot_format_summary">選擇已補丁 Boot 映像文件輸出格式\n若要透過 fastboot/download 模式刷入,請選擇 .img 格式;若要透過 ODIN 刷入,則選擇 .img.tar\n</string>
<string name="complete_uninstall">完全解除安裝</string>
<string name="restore_done">還原完成!</string>
<string name="restore_fail">原廠 boot 映像備份不存在!</string>
<string name="boot_file_patch_msg">選擇原廠 boot 映像備份;支援 .img 以及 .img.tar 格式</string>
<string name="safetyNet_api_error">SafetyNet API 錯誤</string>
<string name="proprietary_title">下載非開源程式</string>
<string name="proprietary_notice">Magisk Manager 是一個 100% 開源的程式,因此不會包含 Google 私有所有權的 SafetyNet API 程式碼。\n\n你允許 Magisk Manager 下載一個擴充包 (包含 GoogleApiClient) 以執行 SafetyNet 檢查嗎?</string>
<string name="dtbo_patched_title">DTBO 已被打上補丁!</string>
<string name="dtbo_patched_reboot">Magisk Manager 已為 dtbo.img 打上補丁,請立即重新啟動</string>
<string name="settings_hide_manager_summary">將 Magisk Manager 以隨機套件名稱重新打包,以達成隱藏效果</string>
<string name="invalid_update_channel">不合法的更新頻道</string>
<string name="settings_update_custom">自訂</string>
<string name="settings_update_custom_msg">請輸入自訂網址</string>
<string name="reboot_recovery">重啟到 Recovery</string>
<string name="reboot_bootloader">重啟到 Bootloader</string>
<string name="reboot_download">重啟到 Download</string>
<string name="android_o_not_support">不支援 Android 8.0+</string>
<string name="restore_img">還原原廠映像檔</string>
<string name="updated_on">更新於:%1$s</string>
<string name="sorting_order">排序方式</string>
<string name="sort_by_name">按名稱排序</string>
<string name="sort_by_update">按更新時間排序</string>
<string name="settings_su_fingerprint_title">啟用指紋認證</string>
<string name="settings_su_fingerprint_summary">用指紋辨識來允許超級用戶權限</string>
<string name="auth_fail">認證失敗</string>
<string name="settings_restore_manager_title">還原 Magisk Manager</string>
<string name="settings_restore_manager_summary">以原安裝包還原 Magisk Manager</string>
<string name="settings_check_update_title">檢查更新</string>
<string name="settings_check_update_summary">在背景定期檢查更新</string>
<string name="disable_fingerprint">沒有指紋加入或是裝置不支援</string>
<string name="setup_done">安裝完成</string>
<string name="setup_fail">安裝失敗</string>
<string name="env_fix_title">需要額外的安裝</string>
<string name="env_fix_msg">您的設備需要额外的安装才能正常使用 Magisk。將下載 Magisk 安装包,是否繼續?</string>
<string name="setup_title">額外安裝</string>
<string name="setup_msg">安裝環境進行中…</string>
<string name="restore_img_msg">還原中…</string>
<string name="install_inactive_slot">安裝到未使用的分區 (使用於OTA後)</string>
<string name="warning">警告</string>
<string name="install_inactive_slot_msg">你的裝置將在下一次重新啟動後強制切換到未使用的分區!\n請在安裝完OTA之後使用。\n是否繼續</string>
<string name="auth_fingerprint">驗證指紋</string>
<string name="open_link_failed_toast">沒有應用程式能夠打開此鏈結…</string>
<string name="download_complete">下載完成</string>
<string name="settings_hosts_toast">已添加 systemless hosts 模組</string>
<string name="progress_channel">進度通知</string>
<string name="dl_one_module">一次僅能下載一個模組</string>
<string name="magisk_up_to_date">Magisk 已是最新版本</string>
<string name="manager_up_to_date">Magisk Manager 已是最新版本</string>
<string name="core_only_enabled">(核心模式啟用)</string>
<string name="show_system_app">顯示系統程式</string>
<string name="unsupport_magisk_title">不支援的 Magisk 版本</string>
<string name="unsupport_magisk_message">此版本的 Magisk Magisk 不支援 Magisk v18.0 以下之版本。\n\n請自行更新 Magisk或是手動將 Magisk Manager 降級。</string>
</resources>

View File

@@ -1,224 +0,0 @@
<resources>
<!--Welcome Activity-->
<string name="modules">Modules</string>
<string name="downloads">Downloads</string>
<string name="superuser">Superuser</string>
<string name="log">Log</string>
<string name="settings">Settings</string>
<string name="install">Install</string>
<string name="unsupport_magisk_title">Unsupported Magisk Version</string>
<string name="unsupport_magisk_message">This version of Magisk Manager does not support Magisk version lower than v18.0.\n\nYou can either manually upgrade Magisk, or downgrade the app to an older version.</string>
<!--Status Fragment-->
<string name="magisk_version_error">Magisk is not installed.</string>
<string name="checking_for_updates">Checking for updates…</string>
<string name="invalid_update_channel">Invalid Update Channel</string>
<string name="safetyNet_check_text">Tap to start SafetyNet check</string>
<string name="checking_safetyNet_status">Checking SafetyNet status…</string>
<string name="safetyNet_check_success">SafetyNet Check Success</string>
<string name="safetyNet_api_error">SafetyNet API Error</string>
<string name="safetyNet_res_invalid">The response is invalid.</string>
<string name="magisk_up_to_date">Magisk is up to date</string>
<string name="manager_up_to_date">Magisk Manager is up to date</string>
<string name="advanced_settings_title">Advanced Settings</string>
<string name="keep_force_encryption">Preserve force encryption</string>
<string name="keep_dm_verity">Preserve AVB 2.0/dm-verity</string>
<string name="current_installed">Installed: %1$s</string>
<string name="latest_version">Latest: %1$s</string>
<string name="uninstall">Uninstall</string>
<string name="uninstall_magisk_title">Uninstall Magisk</string>
<string name="uninstall_magisk_msg">All modules will be disabled/removed. Root will be removed, and your data potentially encrypted if not already.</string>
<string name="update">Update</string>
<string name="core_only_enabled">(Core only mode enabled)</string>
<!--Module Fragment-->
<string name="no_info_provided">(No info provided)</string>
<string name="no_modules_found">No modules found.</string>
<string name="update_file_created">Module will be updated at next reboot.</string>
<string name="remove_file_created">Module will be removed at next reboot.</string>
<string name="remove_file_deleted">Module will not be removed at next reboot.</string>
<string name="disable_file_created">Module will be disabled at next reboot.</string>
<string name="disable_file_removed">Module will be enabled at next reboot.</string>
<string name="author">Created by %1$s</string>
<string name="reboot_recovery">Reboot to Recovery</string>
<string name="reboot_bootloader">Reboot to Bootloader</string>
<string name="reboot_download">Reboot to Download</string>
<!--Repo Fragment-->
<string name="update_available">Update Available</string>
<string name="installed">Installed</string>
<string name="not_installed">Not Installed</string>
<string name="updated_on">Updated on: %1$s</string>
<string name="sorting_order">Sorting Order</string>
<string name="sort_by_name">Sort by name</string>
<string name="sort_by_update">Sort by last update</string>
<!--Log Fragment-->
<string name="menuSaveLog">Save log</string>
<string name="menuReload">Reload</string>
<string name="menuClearLog">Clear log now</string>
<string name="logs_cleared">Log successfully cleared.</string>
<string name="log_is_empty">Log is empty.</string>
<!--About Activity-->
<string name="app_changelog">Changelog</string>
<string name="translators" />
<string name="app_translators">Translators</string>
<!-- System Components, Notifications -->
<string name="update_channel">Magisk Updates</string>
<string name="progress_channel">Progress Notifications</string>
<string name="download_complete">Download complete</string>
<string name="download_file_error">Error downloading file</string>
<string name="magisk_update_title">Magisk Update Available!</string>
<string name="manager_update_title">Magisk Manager Update Available!</string>
<!--Toasts, Dialogs-->
<string name="close">Close</string>
<string name="repo_install_title">Install %1$s</string>
<string name="repo_install_msg">Do you want to install %1$s now?</string>
<string name="download">Download</string>
<string name="reboot">Reboot</string>
<string name="settings_reboot_toast">Reboot to apply settings.</string>
<string name="release_notes">Release notes</string>
<string name="repo_cache_cleared">Repo cache cleared</string>
<string name="internal_storage">The zip is stored in:\n[Internal Storage]%1$s</string>
<string name="manager_download_install">Press to download and install.</string>
<string name="dtbo_patched_title">DTBO was patched!</string>
<string name="dtbo_patched_reboot">Magisk Manager has patched dtbo.img. Please reboot.</string>
<string name="flashing">Flashing</string>
<string name="hide_manager_title">Hiding Magisk Manager…</string>
<string name="hide_manager_fail_toast">Hide Magisk Manager failed.</string>
<string name="open_link_failed_toast">No application found to open the link.</string>
<string name="download_zip_only">Download Zip Only</string>
<string name="patch_boot_file">Patch Boot Image File</string>
<string name="direct_install">Direct Install (Recommended)</string>
<string name="install_inactive_slot">Install to Inactive Slot (After OTA)</string>
<string name="warning">Warning</string>
<string name="install_inactive_slot_msg">Your device will be FORCED to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
<string name="select_method">Select Method</string>
<string name="boot_file_patch_msg">Select stock boot image dump in .img or .img.tar format.</string>
<string name="complete_uninstall">Complete Uninstall</string>
<string name="restore_img">Restore Images</string>
<string name="restore_img_msg">Restoring…</string>
<string name="restore_done">Restoration done!</string>
<string name="restore_fail">Stock backup does not exist!</string>
<string name="proprietary_title">Download Proprietary Code</string>
<string name="proprietary_notice">Magisk Manager is FOSS and doesn\'t contain Google\'s proprietary SafetyNet API code.\n\nWill you allow Magisk Manager to download an extension (contains GoogleApiClient) for SafetyNet checks?</string>
<string name="setup_done">Setup done.</string>
<string name="setup_fail">Setup failed.</string>
<string name="env_fix_title">Requires Additional Setup</string>
<string name="env_fix_msg">Your device needs additional setup for Magisk to work properly. It will download the Magisk setup zip, do you want to proceed now?</string>
<string name="setup_title">Additional Setup</string>
<string name="setup_msg">Running environment setup…</string>
<string name="downloading_toast">Downloading %1$s</string>
<string name="no_rw_storage">This feature will not work without permission to write external storage.</string>
<string name="dl_one_module">Download one module at a time.</string>
<!--Settings Activity -->
<string name="settings_general_category">General</string>
<string name="settings_dark_theme_title">Dark Theme</string>
<string name="settings_dark_theme_summary">Enable dark theme.</string>
<string name="settings_clear_cache_title">Clear Repo Cache</string>
<string name="settings_clear_cache_summary">Clear the cached information for online repos. This forces the app to refresh online.</string>
<string name="settings_hide_manager_title">Hide Magisk Manager</string>
<string name="settings_hide_manager_summary">Repackage Magisk Manager with random package name.</string>
<string name="settings_restore_manager_title">Restore Magisk Manager</string>
<string name="settings_restore_manager_summary">Restore Magisk Manager with original package</string>
<string name="language">Language</string>
<string name="system_default">(System Default)</string>
<string name="settings_update">Update Settings</string>
<string name="settings_check_update_title">Check Updates</string>
<string name="settings_check_update_summary">Periodically check for updates in the background.</string>
<string name="settings_update_channel_title">Update Channel</string>
<string name="settings_update_stable">Stable</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Custom</string>
<string name="settings_update_custom_msg">Insert a custom URL</string>
<string name="settings_boot_format_title">Patched Boot Output Format</string>
<string name="settings_boot_format_summary">Select the format for the output patched boot image.\nChoose .img to flash through fastboot/download mode; choose .img.tar to flash with ODIN.</string>
<string name="settings_core_only_title">Magisk Core Only Mode</string>
<string name="settings_core_only_summary">Enable only core features. MagiskSU and MagiskHide will still be enabled, but no modules will be loaded.</string>
<string name="settings_magiskhide_summary">Hide Magisk from various forms of detection.</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts support for Adblock apps.</string>
<string name="settings_hosts_toast">Added systemless hosts module</string>
<string name="settings_su_app_adb">Apps and ADB</string>
<string name="settings_su_app">Apps only</string>
<string name="settings_su_adb">ADB only</string>
<string name="settings_su_disable">Disabled</string>
<string name="settings_su_request_10">10 seconds</string>
<string name="settings_su_request_15">15 seconds</string>
<string name="settings_su_request_20">20 seconds</string>
<string name="settings_su_request_30">30 seconds</string>
<string name="settings_su_request_45">45 seconds</string>
<string name="settings_su_request_60">60 seconds</string>
<string name="superuser_access">Superuser Access</string>
<string name="auto_response">Automatic Response</string>
<string name="request_timeout">Request Timeout</string>
<string name="superuser_notification">Superuser Notification</string>
<string name="request_timeout_summary">%1$d seconds</string>
<string name="settings_su_reauth_title">Reauthenticate after upgrade</string>
<string name="settings_su_reauth_summary">Reauthenticate superuser permissions after an application upgrades</string>
<string name="settings_su_fingerprint_title">Enable Fingerprint Authentication</string>
<string name="settings_su_fingerprint_summary">Use fingerprint scanner to allow superuser requests</string>
<string name="auth_fingerprint">Authenticate Fingerprint</string>
<string name="multiuser_mode">Multiuser Mode</string>
<string name="settings_owner_only">Device Owner Only</string>
<string name="settings_owner_manage">Device Owner Managed</string>
<string name="settings_user_independent">User-Independent</string>
<string name="owner_only_summary">Only owner has root access.</string>
<string name="owner_manage_summary">Only owner can manage root access and receive request prompts.</string>
<string name="user_indepenent_summary">Each user has his/her own separate root rules.</string>
<string name="mount_namespace_mode">Mount Namespace Mode</string>
<string name="settings_ns_global">Global Namespace</string>
<string name="settings_ns_requester">Inherit Namespace</string>
<string name="settings_ns_isolate">Isolated Namespace</string>
<string name="global_summary">All root sessions use the global mount namespace.</string>
<string name="requester_summary">Root sessions will inherit their requester\'s namespace.</string>
<string name="isolate_summary">Each root session will have its own isolated namespace.</string>
<string name="android_o_not_support">Does not support Android 8.0+.</string>
<string name="disable_fingerprint">No fingerprints were set or no device support.</string>
<!--Superuser-->
<string name="su_request_title">Superuser Request</string>
<string name="deny_with_str">Deny%1$s</string>
<string name="deny">Deny</string>
<string name="prompt">Prompt</string>
<string name="grant">Grant</string>
<string name="su_warning">Grants full access to your device.\nDeny if you\'re not sure!</string>
<string name="forever">Forever</string>
<string name="once">Once</string>
<string name="tenmin">10 mins</string>
<string name="twentymin">20 mins</string>
<string name="thirtymin">30 mins</string>
<string name="sixtymin">60 mins</string>
<string name="su_allow_toast">%1$s was granted Superuser rights</string>
<string name="su_deny_toast">%1$s was denied Superuser rights</string>
<string name="no_apps_found">No apps found</string>
<string name="su_snack_grant">Superuser rights of %1$s are granted</string>
<string name="su_snack_deny">Superuser rights of %1$s are denied</string>
<string name="su_snack_notif_on">Notifications of %1$s are enabled</string>
<string name="su_snack_notif_off">Notifications of %1$s are disabled</string>
<string name="su_snack_log_on">Logging of %1$s is enabled</string>
<string name="su_snack_log_off">Logging of %1$s is disabled</string>
<string name="su_snack_revoke">%1$s rights are revoked</string>
<string name="su_revoke_title">Revoke?</string>
<string name="su_revoke_msg">Confirm to revoke %1$s rights?</string>
<string name="toast">Toast</string>
<string name="none">None</string>
<string name="auth_fail">Authentication Failed</string>
<!--Superuser logs-->
<string name="pid">PID: %1$d</string>
<string name="target_uid">Target UID: %1$d</string>
<string name="command">Command: %1$s</string>
<!-- MagiskHide -->
<string name="show_system_app">Show system apps</string>
</resources>

View File

@@ -3,28 +3,75 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.topjohnwu.magisk">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:installLocation="internalOnly"
android:label="@string/app_name"
android:supportsRtl="true"
tools:ignore="GoogleAppIndexingWarning,UnusedAttribute">
android:name="a.e"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute,GoogleAppIndexingWarning">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
<!-- Activities -->
<activity
android:name="a.b"
android:configChanges="orientation|screenSize"
android:exported="true" />
<activity
android:name="a.c"
android:configChanges="orientation|screenSize"
android:exported="true"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="a.f"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="nosensor"
android:theme="@style/AppTheme.NoDrawer" />
<!-- Superuser -->
<activity
android:name="a.m"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
android:directBootAware="true"
android:excludeFromRecents="true"
android:theme="@style/SuRequest" />
<!-- Receiver -->
<receiver
android:name="a.h"
android:directBootAware="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.LOCALE_CHANGED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Service -->
<service android:name="a.j" />
<!-- Hardcode GMS version -->
<meta-data
android:name="com.google.android.gms.version"
android:value="12451000" />
</application>
</manifest>
</manifest>

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.MainActivity;
import com.topjohnwu.magisk.ui.MainActivity;
public class b extends MainActivity {
/* stub */

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.SplashActivity;
import com.topjohnwu.magisk.ui.SplashActivity;
public class c extends SplashActivity {
/* stub */

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.FlashActivity;
import com.topjohnwu.magisk.ui.flash.FlashActivity;
public class f extends FlashActivity {
/* stub */

View File

@@ -2,7 +2,7 @@ package a;
import android.content.Context;
import com.topjohnwu.magisk.components.UpdateCheckService;
import com.topjohnwu.magisk.model.update.UpdateCheckService;
import androidx.annotation.NonNull;
import androidx.work.WorkerParameters;

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.components.GeneralReceiver;
import com.topjohnwu.magisk.model.receiver.GeneralReceiver;
public class h extends GeneralReceiver {
/* stub */

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.components.DownloadModuleService;
import com.topjohnwu.magisk.model.download.DownloadModuleService;
public class j extends DownloadModuleService {
/* stub */

View File

@@ -1,6 +1,6 @@
package a;
import com.topjohnwu.magisk.SuRequestActivity;
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity;
public class m extends SuRequestActivity {
/* stub */

View File

@@ -2,7 +2,7 @@ package a;
import android.content.Context;
import com.topjohnwu.magisk.components.DelegateWorker;
import com.topjohnwu.magisk.model.worker.DelegateWorker;
import java.lang.reflect.ParameterizedType;

View File

@@ -0,0 +1,101 @@
package com.topjohnwu.magisk;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDelegate;
import com.topjohnwu.magisk.data.database.MagiskDB;
import com.topjohnwu.magisk.data.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.ui.base.BaseActivity;
import com.topjohnwu.magisk.utils.LocaleManager;
import com.topjohnwu.magisk.utils.RootUtils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import java.util.concurrent.ThreadPoolExecutor;
public class App extends Application implements Application.ActivityLifecycleCallbacks {
public static App self;
public static Context deContext;
public static ThreadPoolExecutor THREAD_POOL;
// Global resources
public SharedPreferences prefs;
public MagiskDB mDB;
public RepoDatabaseHelper repoDB;
private volatile BaseActivity foreground;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
Shell.Config.setFlags(Shell.FLAG_MOUNT_MASTER | Shell.FLAG_USE_MAGISK_BUSYBOX);
Shell.Config.verboseLogging(BuildConfig.DEBUG);
Shell.Config.addInitializers(RootUtils.class);
Shell.Config.setTimeout(2);
THREAD_POOL = (ThreadPoolExecutor) AsyncTask.THREAD_POOL_EXECUTOR;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
self = this;
deContext = base;
registerActivityLifecycleCallbacks(this);
if (Build.VERSION.SDK_INT >= 24) {
deContext = base.createDeviceProtectedStorageContext();
deContext.moveSharedPreferencesFrom(base,
PreferenceManager.getDefaultSharedPreferencesName(base));
}
prefs = PreferenceManager.getDefaultSharedPreferences(deContext);
mDB = new MagiskDB(base);
Networking.init(base);
LocaleManager.setLocale(this);
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleManager.setLocale(this);
}
public static BaseActivity foreground() {
return self.foreground;
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {}
@Override
public void onActivityStarted(@NonNull Activity activity) {}
@Override
public synchronized void onActivityResumed(@NonNull Activity activity) {
foreground = (BaseActivity) activity;
}
@Override
public synchronized void onActivityPaused(@NonNull Activity activity) {
foreground = null;
}
@Override
public void onActivityStopped(@NonNull Activity activity) {}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {}
}

View File

@@ -1,8 +1,12 @@
package com.topjohnwu.magisk;
import com.topjohnwu.magisk.components.DownloadModuleService;
import com.topjohnwu.magisk.components.GeneralReceiver;
import com.topjohnwu.magisk.components.UpdateCheckService;
import com.topjohnwu.magisk.model.download.DownloadModuleService;
import com.topjohnwu.magisk.model.receiver.GeneralReceiver;
import com.topjohnwu.magisk.model.update.UpdateCheckService;
import com.topjohnwu.magisk.ui.MainActivity;
import com.topjohnwu.magisk.ui.SplashActivity;
import com.topjohnwu.magisk.ui.flash.FlashActivity;
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity;
import java.util.HashMap;
import java.util.Map;

View File

@@ -1,9 +1,10 @@
package com.topjohnwu.magisk;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Xml;
import androidx.collection.ArrayMap;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
@@ -58,21 +59,25 @@ public class Config {
public static final String CHECK_UPDATES = "check_update";
public static final String UPDATE_CHANNEL = "update_channel";
public static final String CUSTOM_CHANNEL = "custom_channel";
public static final String BOOT_FORMAT = "boot_format";
public static final String UPDATE_SERVICE_VER = "update_service_version";
public static final String MAGISKHIDE = "magiskhide";
public static final String COREONLY = "disable";
public static final String LOCALE = "locale";
public static final String DARK_THEME = "dark_theme";
public static final String ETAG_KEY = "ETag";
public static final String REPO_ORDER = "repo_order";
public static final String SHOW_SYSTEM_APP = "show_system";
// system state
public static final String UPDATE_SERVICE_VER = "update_service_version";
public static final String MAGISKHIDE = "magiskhide";
public static final String COREONLY = "disable";
}
public static class Value {
public static final int DEFAULT_CHANNEL = -1;
public static final int STABLE_CHANNEL = 0;
public static final int BETA_CHANNEL = 1;
public static final int CUSTOM_CHANNEL = 2;
public static final int CANARY_CHANNEL = 3;
public static final int CANARY_DEBUG_CHANNEL = 4;
public static final int ROOT_ACCESS_DISABLED = 0;
public static final int ROOT_ACCESS_APPS_ONLY = 1;
public static final int ROOT_ACCESS_ADB_ONLY = 2;
@@ -93,46 +98,6 @@ public class Config {
public static final int ORDER_DATE = 1;
}
private static Bundle defs = new Bundle();
static {
/* Set default configurations */
// prefs int
defs.putInt(Key.REPO_ORDER, Value.ORDER_DATE);
// prefs string int
defs.putInt(Key.SU_REQUEST_TIMEOUT, 10);
defs.putInt(Key.SU_AUTO_RESPONSE, Value.SU_PROMPT);
defs.putInt(Key.SU_NOTIFICATION, Value.NOTIFICATION_TOAST);
defs.putInt(Key.UPDATE_CHANNEL, Value.STABLE_CHANNEL);
// prefs bool
defs.putBoolean(Key.CHECK_UPDATES, true);
// defs.putBoolean(Key.DARK_THEME, false);
// defs.putBoolean(Key.SU_REAUTH, false);
// defs.putBoolean(Key.MAGISKHIDE, false);
// defs.putBoolean(Key.COREONLY, false);
// defs.putBoolean(Key.SHOW_SYSTEM_APP, false);
// prefs string
defs.putString(Key.CUSTOM_CHANNEL, "");
defs.putString(Key.BOOT_FORMAT, ".img");
defs.putString(Key.LOCALE, "");
// defs.putString(Key.ETAG_KEY, null);
// db int
defs.putInt(Key.ROOT_ACCESS, Value.ROOT_ACCESS_APPS_AND_ADB);
defs.putInt(Key.SU_MNT_NS, Value.NAMESPACE_MODE_REQUESTER);
defs.putInt(Key.SU_MULTIUSER_MODE, Value.MULTIUSER_MODE_OWNER_ONLY);
// db bool
// defs.putBoolean(Key.SU_FINGERPRINT, false);
// db strings
// defs.putString(Key.SU_MANAGER, null);
}
public static void loadMagiskInfo() {
try {
magiskVersionString = ShellUtils.fastCmd("magisk -v").split(":")[0];
@@ -145,15 +110,15 @@ public class Config {
// Flush prefs to disk
App app = App.self;
app.prefs.edit().commit();
File xml = new File(app.getFilesDir().getParent() + "/shared_prefs",
File xml = new File(App.deContext.getFilesDir().getParent() + "/shared_prefs",
app.getPackageName() + "_preferences.xml");
Shell.su(Utils.fmt("cat %s > /data/user/0/%s", xml, Const.MANAGER_CONFIGS)).exec();
Shell.su(Utils.fmt("cat %s > /data/adb/%s", xml, Const.MANAGER_CONFIGS)).exec();
}
public static void initialize() {
SharedPreferences pref = App.self.prefs;
SharedPreferences.Editor editor = pref.edit();
SuFile config = new SuFile("/data/user/0/" + Const.MANAGER_CONFIGS);
File config = SuFile.open("/data/adb", Const.MANAGER_CONFIGS);
if (config.exists()) {
try {
SuFileInputStream is = new SuFileInputStream(config);
@@ -210,11 +175,8 @@ public class Config {
config.delete();
}
// Set to defaults if not set
setDefs(pref, editor,
Key.SU_REQUEST_TIMEOUT, Key.SU_AUTO_RESPONSE, Key.ROOT_ACCESS,
Key.SU_MNT_NS, Key.SU_NOTIFICATION, Key.DARK_THEME,
Key.CHECK_UPDATES, Key.UPDATE_CHANNEL, Key.REPO_ORDER);
// Set defaults if not set
setDefs(pref, editor);
// These settings are from actual device state
editor.putBoolean(Key.MAGISKHIDE, magiskHide)
@@ -251,7 +213,6 @@ public class Config {
return PREF_BOOL;
case Key.CUSTOM_CHANNEL:
case Key.BOOT_FORMAT:
case Key.LOCALE:
case Key.ETAG_KEY:
return PREF_STR;
@@ -277,22 +238,22 @@ public class Config {
App app = App.self;
switch (getConfigType(key)) {
case PREF_INT:
return (T) (Integer) app.prefs.getInt(key, defs.getInt(key));
return (T) (Integer) app.prefs.getInt(key, getDef(key));
case PREF_STR_INT:
return (T) (Integer) Utils.getPrefsInt(app.prefs, key, defs.getInt(key));
return (T) (Integer) Utils.getPrefsInt(app.prefs, key, getDef(key));
case PREF_BOOL:
return (T) (Boolean) app.prefs.getBoolean(key, defs.getBoolean(key));
return (T) (Boolean) app.prefs.getBoolean(key, getDef(key));
case PREF_STR:
return (T) app.prefs.getString(key, defs.getString(key));
return (T) app.prefs.getString(key, getDef(key));
case DB_INT:
return (T) (Integer) app.mDB.getSettings(key, defs.getInt(key));
return (T) (Integer) app.mDB.getSettings(key, getDef(key));
case DB_BOOL:
return (T) (Boolean) (app.mDB.getSettings(key, defs.getBoolean(key) ? 1 : 0) != 0);
return (T) (Boolean) (app.mDB.getSettings(key, getDef(key) ? 1 : 0) != 0);
case DB_STR:
return (T) app.mDB.getStrings(key, defs.getString(key));
return (T) app.mDB.getStrings(key, getDef(key));
}
/* Will never get here (IllegalArgumentException in getConfigType) */
return (T) new Object();
return null;
}
public static void set(String key, Object val) {
@@ -324,7 +285,6 @@ public class Config {
public static void remove(String key) {
App app = App.self;
int def;
switch (getConfigType(key)) {
case PREF_INT:
case PREF_STR_INT:
@@ -332,13 +292,9 @@ public class Config {
case PREF_STR:
app.prefs.edit().remove(key).apply();
break;
case DB_INT:
def = defs.getInt(key);
app.mDB.setSettings(key, def);
break;
case DB_BOOL:
def = defs.getBoolean(key) ? 1 : 0;
app.mDB.setSettings(key, def);
case DB_INT:
app.mDB.rmSettings(key);
break;
case DB_STR:
app.mDB.setStrings(key, null);
@@ -346,25 +302,93 @@ public class Config {
}
}
private static void setDefs(SharedPreferences pref, SharedPreferences.Editor editor, String... keys) {
for (String key : keys) {
private static ArrayMap<String, Object> defs = new ArrayMap<>();
static {
/* Set default configurations */
// prefs int
defs.put(Key.REPO_ORDER, Value.ORDER_DATE);
// prefs string int
defs.put(Key.SU_REQUEST_TIMEOUT, 10);
defs.put(Key.SU_AUTO_RESPONSE, Value.SU_PROMPT);
defs.put(Key.SU_NOTIFICATION, Value.NOTIFICATION_TOAST);
defs.put(Key.UPDATE_CHANNEL, Utils.isCanary() ?
Value.CANARY_DEBUG_CHANNEL : Value.DEFAULT_CHANNEL);
// prefs bool
defs.put(Key.CHECK_UPDATES, true);
defs.put(Key.DARK_THEME, true);
//defs.put(Key.SU_REAUTH, false);
//defs.put(Key.SHOW_SYSTEM_APP, false);
// prefs string
defs.put(Key.CUSTOM_CHANNEL, "");
defs.put(Key.LOCALE, "");
//defs.put(Key.ETAG_KEY, null);
// db int
defs.put(Key.ROOT_ACCESS, Value.ROOT_ACCESS_APPS_AND_ADB);
defs.put(Key.SU_MNT_NS, Value.NAMESPACE_MODE_REQUESTER);
defs.put(Key.SU_MULTIUSER_MODE, Value.MULTIUSER_MODE_OWNER_ONLY);
// db bool
//defs.put(Key.SU_FINGERPRINT, false);
// db strings
//defs.put(Key.SU_MANAGER, null);
}
private static <T> T getDef(String key) {
Object val = defs.get(key);
switch (getConfigType(key)) {
case PREF_INT:
case DB_INT:
case PREF_STR_INT:
return val != null ? (T) val : (T) (Integer) 0;
case DB_BOOL:
case PREF_BOOL:
return val != null ? (T) val : (T) (Boolean) false;
case DB_STR:
case PREF_STR:
return (T) val;
}
/* Will never get here (IllegalArgumentException in getConfigType) */
return null;
}
private static void setDefs(SharedPreferences pref, SharedPreferences.Editor editor) {
App app = App.self;
for (String key : defs.keySet()) {
int type = getConfigType(key);
switch (type) {
case DB_INT:
editor.putString(key, String.valueOf(
app.mDB.getSettings(key, (Integer) defs.get(key))));
continue;
case DB_STR:
editor.putString(key, app.mDB.getStrings(key, (String) defs.get(key)));
continue;
case DB_BOOL:
int bs = app.mDB.getSettings(key, -1);
editor.putBoolean(key, bs < 0 ? (Boolean) defs.get(key) : bs != 0);
continue;
}
if (pref.contains(key))
continue;
switch (getConfigType(key)) {
switch (type) {
case PREF_INT:
editor.putInt(key, defs.getInt(key));
editor.putInt(key, (Integer) defs.get(key));
break;
case DB_INT:
case PREF_STR_INT:
editor.putString(key, String.valueOf(defs.getInt(key)));
editor.putString(key, String.valueOf(defs.get(key)));
break;
case PREF_STR:
case DB_STR:
editor.putString(key, defs.getString(key));
editor.putString(key, (String) defs.get(key));
break;
case PREF_BOOL:
case DB_BOOL:
editor.putBoolean(key, defs.getBoolean(key));
editor.putBoolean(key, (Boolean) defs.get(key));
break;
}
}

View File

@@ -4,8 +4,6 @@ import android.os.Environment;
import android.os.Process;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class Const {
@@ -27,22 +25,14 @@ public class Const {
EXTERNAL_PATH.mkdirs();
}
public static final String BUSYBOX_PATH = "/sbin/.magisk/busybox";
public static final String TMP_FOLDER_PATH = "/dev/tmp";
public static final String MAGISK_LOG = "/cache/magisk.log";
public static final String MANAGER_CONFIGS = ".tmp.magisk.config";
// Versions
public static final int UPDATE_SERVICE_VER = 1;
public static final int MIN_MODULE_VER = 1500;
public static final int SNET_EXT_VER = 12;
/* A list of apps that should not be shown as hide-able */
public static final List<String> HIDE_BLACKLIST = Arrays.asList(
App.self.getPackageName(),
"com.google.android.gms"
);
public static final int USER_ID = Process.myUid() / 100000;
public static final class MAGISK_VER {
@@ -50,10 +40,8 @@ public class Const {
}
public static class ID {
public static final int UPDATE_SERVICE_ID = 1;
public static final int FETCH_ZIP = 2;
public static final int SELECT_BOOT = 3;
public static final int ONBOOT_SERVICE_ID = 6;
// notifications
public static final int MAGISK_UPDATE_NOTIFICATION_ID = 4;
@@ -71,9 +59,12 @@ public class Const {
}
public static final String STABLE_URL = getRaw("master", "stable.json");
public static final String BETA_URL = getRaw("master", "beta.json");
public static final String CANARY_URL = getRaw("master", "canary_builds/release.json");
public static final String CANARY_DEBUG_URL = getRaw("master", "canary_builds/canary.json");
public static final String REPO_URL = "https://api.github.com/users/Magisk-Modules-Repo/repos?per_page=100&sort=pushed&page=%d";
public static final String FILE_URL = "https://raw.githubusercontent.com/Magisk-Modules-Repo/%s/master/%s";
public static final String ZIP_URL = "https://github.com/Magisk-Modules-Repo/%s/archive/master.zip";
public static final String MODULE_INSTALLER = "https://raw.githubusercontent.com/topjohnwu/Magisk/master/scripts/module_installer.sh";
public static final String PAYPAL_URL = "https://www.paypal.me/topjohnwu";
public static final String PATREON_URL = "https://www.patreon.com/topjohnwu";
public static final String TWITTER_URL = "https://twitter.com/topjohnwu";
@@ -88,19 +79,17 @@ public class Const {
public static final String LINK_KEY = "Link";
public static final String IF_NONE_MATCH = "If-None-Match";
// intents
public static final String FROM_SPLASH = "splash";
public static final String OPEN_SECTION = "section";
public static final String INTENT_SET_NAME = "filename";
public static final String INTENT_SET_LINK = "link";
public static final String FLASH_ACTION = "action";
public static final String FLASH_SET_BOOT = "boot";
public static final String BROADCAST_MANAGER_UPDATE = "manager_update";
public static final String BROADCAST_REBOOT = "reboot";
}
public static class Value {
public static final String FLASH_ZIP = "flash";
public static final String PATCH_BOOT = "patch";
public static final String PATCH_FILE = "patch";
public static final String FLASH_MAGISK = "magisk";
public static final String FLASH_INACTIVE_SLOT = "slot";
public static final String UNINSTALL = "uninstall";

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.database;
package com.topjohnwu.magisk.data.database;
import android.content.ContentValues;
import android.content.Context;
@@ -7,8 +7,8 @@ import android.text.TextUtils;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.container.Policy;
import com.topjohnwu.magisk.container.SuLogEntry;
import com.topjohnwu.magisk.model.entity.Policy;
import com.topjohnwu.magisk.model.entity.SuLogEntry;
import com.topjohnwu.magisk.utils.LocaleManager;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.superuser.Shell;
@@ -152,6 +152,10 @@ public class MagiskDB {
rawSQL("DELETE FROM %s", LOG_TABLE);
}
public void rmSettings(String key) {
rawSQL("DELETE FROM %s WHERE key=\"%s\"", SETTINGS_TABLE, key);
}
public void setSettings(String key, int value) {
ContentValues data = new ContentValues();
data.put("key", key);

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.database;
package com.topjohnwu.magisk.data.database;
import android.content.Context;
import android.database.Cursor;
@@ -6,15 +6,14 @@ import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.container.Repo;
import com.topjohnwu.magisk.model.entity.Repo;
import java.util.HashSet;
import java.util.Set;
public class RepoDatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VER = 4;
private static final int DATABASE_VER = 5;
private static final String TABLE_NAME = "repos";
private SQLiteDatabase mDb;
@@ -22,9 +21,6 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
public RepoDatabaseHelper(Context context) {
super(context, "repo.db", null, DATABASE_VER);
mDb = getWritableDatabase();
// Remove outdated repos
mDb.delete(TABLE_NAME, "minMagisk<?", new String[] { String.valueOf(Const.MIN_MODULE_VER) });
}
@Override
@@ -39,7 +35,7 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL(
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " +
"(id TEXT, name TEXT, version TEXT, versionCode INT, minMagisk INT, " +
"(id TEXT, name TEXT, version TEXT, versionCode INT, " +
"author TEXT, description TEXT, last_update INT, PRIMARY KEY(id))");
Config.remove(Config.Key.ETAG_KEY);
}
@@ -96,9 +92,7 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
case Config.Value.ORDER_DATE:
orderBy = "last_update DESC";
}
return mDb.query(TABLE_NAME, null, "minMagisk<=? AND minMagisk>=?",
new String[] { String.valueOf(Config.magiskVersionCode), String.valueOf(Const.MIN_MODULE_VER) },
null, null, orderBy);
return mDb.query(TABLE_NAME, null, null, null, null, null, orderBy);
}
public Set<String> getRepoIDSet() {

View File

@@ -0,0 +1,427 @@
package com.topjohnwu.magisk.model.adapters;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import androidx.collection.ArraySet;
import androidx.recyclerview.widget.RecyclerView;
import com.buildware.widget.indeterm.IndeterminateCheckBox;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Event;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.magisk.view.ArrowExpandable;
import com.topjohnwu.magisk.view.Expandable;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.internal.UiThreadHandler;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import butterknife.BindView;
import java9.util.Comparators;
import java9.util.Lists;
import java9.util.Objects;
import java9.util.Sets;
import java9.util.stream.Collectors;
import java9.util.stream.Stream;
import java9.util.stream.StreamSupport;
public class ApplicationAdapter extends SectionedAdapter
<ApplicationAdapter.AppViewHolder, ApplicationAdapter.ProcessViewHolder> {
private static final String SAFETYNET_PROCESS = "com.google.android.gms.unstable";
private static final String GMS_PACKAGE = "com.google.android.gms";
private static boolean old_hide = false;
/* A list of apps that should not be shown as hide-able */
private static final List<String> HIDE_BLACKLIST = Lists.of(
App.self.getPackageName(),
"android",
"com.android.chrome",
"com.chrome.beta",
"com.chrome.dev",
"com.chrome.canary",
"com.android.webview",
"com.google.android.webview"
);
private static final List<String> DEFAULT_HIDELIST = Lists.of(
SAFETYNET_PROCESS
);
private static int BOTTOM_MARGIN = -1;
private List<HideAppInfo> fullList, showList;
private List<HideTarget> hideList;
private PackageManager pm;
private boolean showSystem;
public ApplicationAdapter(Context context) {
fullList = showList = Collections.emptyList();
hideList = Collections.emptyList();
pm = context.getPackageManager();
showSystem = Config.get(Config.Key.SHOW_SYSTEM_APP);
AsyncTask.SERIAL_EXECUTOR.execute(this::loadApps);
}
private static ViewGroup.MarginLayoutParams getMargins(RecyclerView.ViewHolder vh) {
return (ViewGroup.MarginLayoutParams) vh.itemView.getLayoutParams();
}
@Override
public int getSectionCount() {
return showList.size();
}
@Override
public int getItemCount(int section) {
HideAppInfo app = showList.get(section);
return app.expanded ? app.processList.size() : 0;
}
@Override
public AppViewHolder onCreateSectionViewHolder(ViewGroup parent) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_hide_app, parent, false);
AppViewHolder vh = new AppViewHolder(v);
if (BOTTOM_MARGIN < 0)
BOTTOM_MARGIN = getMargins(vh).bottomMargin;
return vh;
}
@Override
public ProcessViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_hide_process, parent, false);
return new ProcessViewHolder(v);
}
@Override
public void onBindSectionViewHolder(AppViewHolder holder, int section) {
HideAppInfo app = showList.get(section);
holder.app_name.setText(app.name);
holder.app_icon.setImageDrawable(app.info.loadIcon(pm));
holder.package_name.setText(app.info.packageName);
holder.checkBox.setOnStateChangedListener(null);
holder.checkBox.setState(app.getState());
holder.ex.setExpanded(app.expanded);
int index = getItemPosition(section, 0);
holder.checkBox.setOnStateChangedListener((IndeterminateCheckBox box, @Nullable Boolean status) -> {
if (status != null) {
setHide(status, app);
if (app.expanded)
notifyItemRangeChanged(index, app.processList.size());
}
});
if (app.processList.size() > 1) {
holder.arrow.setVisibility(View.VISIBLE);
holder.trigger.setOnClickListener((v) -> {
if (app.expanded) {
app.expanded = false;
notifyItemRangeRemoved(index, app.processList.size());
holder.ex.collapse();
} else {
app.expanded = true;
notifyItemRangeInserted(index, app.processList.size());
holder.ex.expand();
}
});
} else {
holder.arrow.setVisibility(View.GONE);
holder.trigger.setOnClickListener(null);
}
}
@Override
public void onBindItemViewHolder(ProcessViewHolder holder, int section, int position) {
HideAppInfo app = showList.get(section);
HideProcessInfo target = app.processList.get(position);
holder.process.setText(target.name);
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(target.hidden);
holder.checkbox.setOnCheckedChangeListener((v, checked) -> {
setHide(checked, app, target);
notifyItemChanged(getSectionPosition(section));
});
getMargins(holder).bottomMargin =
position == app.processList.size() - 1 ? BOTTOM_MARGIN : 0;
}
public void filter(String constraint) {
AsyncTask.SERIAL_EXECUTOR.execute(() -> {
Stream<HideAppInfo> s = StreamSupport.stream(fullList)
.filter(this::systemFilter)
.filter(t -> nameFilter(t, constraint));
UiThreadHandler.run(() -> {
showList = s.collect(Collectors.toList());
notifyDataSetChanged();
});
});
}
public void setShowSystem(boolean b) {
showSystem = b;
}
public void refresh() {
AsyncTask.SERIAL_EXECUTOR.execute(this::loadApps);
}
private void setHide(boolean add, HideAppInfo app) {
if (add) {
StreamSupport.stream(app.processList).forEach(p -> setHide(true, app, p));
} else {
if (StreamSupport.stream(app.processList)
.anyMatch(p -> p.name.equals(SAFETYNET_PROCESS))) {
StreamSupport.stream(app.processList).forEach(p -> setHide(false, app, p));
} else {
// Quick removal
Shell.su("magiskhide --rm " + app.info.packageName).submit();
StreamSupport.stream(app.processList).forEach(p -> p.hidden = false);
}
}
}
private void setHide(boolean add, HideAppInfo app, HideProcessInfo process) {
// Don't remove SafetyNet
if (!add && DEFAULT_HIDELIST.contains(process.name))
return;
Shell.su(Utils.fmt("magiskhide --%s %s %s", add ? "add" : "rm",
app.info.packageName, process.name)).submit();
process.hidden = add;
}
private void addProcesses(Set<String> set, ComponentInfo[] infos) {
if (infos != null)
for (ComponentInfo info : infos)
set.add(info.processName);
}
private PackageInfo getPackageInfo(String pkg) {
// Try super hard to get as much info as possible
try {
return pm.getPackageInfo(pkg,
PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES |
PackageManager.GET_RECEIVERS | PackageManager.GET_PROVIDERS);
} catch (Exception e1) {
try {
PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_ACTIVITIES);
info.services = pm.getPackageInfo(pkg, PackageManager.GET_SERVICES).services;
info.receivers = pm.getPackageInfo(pkg, PackageManager.GET_RECEIVERS).receivers;
info.providers = pm.getPackageInfo(pkg, PackageManager.GET_PROVIDERS).providers;
return info;
} catch (Exception e2) {
return null;
}
}
}
@WorkerThread
private void loadApps() {
hideList = StreamSupport.stream(Shell.su("magiskhide --ls").exec().getOut())
.map(HideTarget::new)
.collect(Collectors.toList());
fullList = StreamSupport.stream(pm.getInstalledApplications(0))
.filter(info -> !HIDE_BLACKLIST.contains(info.packageName) && info.enabled)
.map(info -> {
if (old_hide) {
return new HideAppInfo(info, Sets.of(info.packageName));
} else {
Set<String> set = new ArraySet<>();
PackageInfo pkg = getPackageInfo(info.packageName);
if (pkg != null) {
addProcesses(set, pkg.activities);
addProcesses(set, pkg.services);
addProcesses(set, pkg.receivers);
addProcesses(set, pkg.providers);
}
if (set.isEmpty())
return null;
return new HideAppInfo(info, set);
}
}).filter(Objects::nonNull).sorted()
.collect(Collectors.toList());
Event.trigger(false, Event.MAGISK_HIDE_DONE);
}
// True if not system app or user already hidden it
private boolean systemFilter(HideAppInfo target) {
return showSystem || target.haveHidden() ||
(target.info.flags & ApplicationInfo.FLAG_SYSTEM) == 0;
}
private boolean contains(String s, String filter) {
return s.toLowerCase().contains(filter);
}
private boolean nameFilter(HideAppInfo target, String filter) {
if (filter == null || filter.isEmpty())
return true;
filter = filter.toLowerCase();
if (contains(target.name, filter))
return true;
for (HideProcessInfo p : target.processList) {
if (contains(p.name, filter))
return true;
}
return contains(target.info.packageName, filter);
}
class HideAppInfo implements Comparable<HideAppInfo> {
String name;
ApplicationInfo info;
List<HideProcessInfo> processList;
boolean expanded;
IndeterminateCheckBox.OnStateChangedListener listener;
HideAppInfo(ApplicationInfo appInfo, Set<String> set) {
info = appInfo;
name = Utils.getAppLabel(info, pm);
expanded = false;
processList = StreamSupport.stream(set)
.map(process -> new HideProcessInfo(info.packageName, process))
.sorted().collect(Collectors.toList());
listener = (IndeterminateCheckBox box, @Nullable Boolean status) -> {
if (status != null) {
for (HideProcessInfo p : processList) {
String cmd = Utils.fmt("magiskhide --%s %s %s",
status ? "add" : "rm", info.packageName, p.name);
Shell.su(cmd).submit();
p.hidden = status;
}
}
};
}
@Override
public int compareTo(HideAppInfo o) {
Comparator<HideAppInfo> c;
c = Comparators.comparing(HideAppInfo::haveHidden);
c = Comparators.reversed(c);
c = Comparators.thenComparing(c, t -> t.name, String::compareToIgnoreCase);
c = Comparators.thenComparing(c, t -> t.info.packageName);
return c.compare(this, o);
}
Boolean getState() {
boolean all = true;
boolean hidden = false;
for (HideProcessInfo p : processList) {
if (!p.hidden)
all = false;
else
hidden = true;
}
if (all)
return true;
return hidden ? null : false;
}
boolean haveHidden() {
Boolean c = getState();
return c == null ? true : c;
}
}
class HideProcessInfo implements Comparable<HideProcessInfo> {
String name;
boolean hidden;
HideProcessInfo(String pkg, String process) {
this.name = process;
for (HideTarget t : hideList) {
if (t.pkg.equals(pkg) && t.process.equals(process)) {
hidden = true;
break;
}
}
}
@Override
public int compareTo(HideProcessInfo o) {
Comparator<HideProcessInfo> c;
c = Comparators.comparing((HideProcessInfo t) -> t.hidden);
c = Comparators.reversed(c);
c = Comparators.thenComparing(c, t -> t.name);
return c.compare(this, o);
}
}
class HideTarget {
String pkg;
String process;
HideTarget(String line) {
String[] split = line.split("\\|", 2);
pkg = split[0];
if (split.length == 2) {
process = split[1];
} else {
// Backwards compatibility
old_hide = true;
process = pkg;
}
}
}
class AppViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.app_icon) ImageView app_icon;
@BindView(R.id.app_name) TextView app_name;
@BindView(R.id.package_name) TextView package_name;
@BindView(R.id.checkbox) IndeterminateCheckBox checkBox;
@BindView(R.id.trigger) View trigger;
@BindView(R.id.arrow) ImageView arrow;
Expandable ex;
AppViewHolder(@NonNull View itemView) {
super(itemView);
new ApplicationAdapter$AppViewHolder_ViewBinding(this, itemView);
ex = new ArrowExpandable(new Expandable() {
@Override
protected void onExpand() {
getMargins(AppViewHolder.this).bottomMargin = 0;
}
@Override
protected void onCollapse() {
getMargins(AppViewHolder.this).bottomMargin = BOTTOM_MARGIN;
}
}, arrow);
}
}
class ProcessViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.process) TextView process;
@BindView(R.id.checkbox) CheckBox checkbox;
ProcessViewHolder(@NonNull View itemView) {
super(itemView);
new ApplicationAdapter$ProcessViewHolder_ViewBinding(this, itemView);
}
}
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.content.Context;
import android.text.TextUtils;
@@ -9,16 +9,17 @@ import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.container.Module;
import com.topjohnwu.magisk.uicomponents.SnackbarMaker;
import com.topjohnwu.magisk.model.entity.Module;
import com.topjohnwu.magisk.view.SnackbarMaker;
import com.topjohnwu.superuser.Shell;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHolder> {

View File

@@ -1,6 +1,7 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.view.LayoutInflater;
import android.view.View;
@@ -8,22 +9,24 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.material.snackbar.Snackbar;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.container.Policy;
import com.topjohnwu.magisk.database.MagiskDB;
import com.topjohnwu.magisk.dialogs.CustomAlertDialog;
import com.topjohnwu.magisk.dialogs.FingerprintAuthDialog;
import com.topjohnwu.magisk.uicomponents.ArrowExpandedViewHolder;
import com.topjohnwu.magisk.uicomponents.ExpandableViewHolder;
import com.topjohnwu.magisk.uicomponents.SnackbarMaker;
import com.topjohnwu.magisk.utils.FingerprintHelper;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.SwitchCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.data.database.MagiskDB;
import com.topjohnwu.magisk.model.entity.Policy;
import com.topjohnwu.magisk.utils.FingerprintHelper;
import com.topjohnwu.magisk.view.ArrowExpandable;
import com.topjohnwu.magisk.view.Expandable;
import com.topjohnwu.magisk.view.ExpandableViewHolder;
import com.topjohnwu.magisk.view.SnackbarMaker;
import com.topjohnwu.magisk.view.dialogs.CustomAlertDialog;
import com.topjohnwu.magisk.view.dialogs.FingerprintAuthDialog;
import java.util.List;
import butterknife.BindView;
public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder> {
@@ -42,13 +45,13 @@ public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_policy, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Policy policy = policyList.get(position);
holder.settings.setExpanded(expandList[position]);
@@ -115,20 +118,28 @@ public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder
dbHelper.updatePolicy(policy);
}
});
holder.delete.setOnClickListener(v -> new CustomAlertDialog((Activity) v.getContext())
.setTitle(R.string.su_revoke_title)
.setMessage(v.getContext().getString(R.string.su_revoke_msg, policy.appName))
.setPositiveButton(R.string.yes, (dialog, which) -> {
policyList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, policyList.size());
SnackbarMaker.make(holder.itemView, v.getContext().getString(R.string.su_snack_revoke, policy.appName),
Snackbar.LENGTH_SHORT).show();
dbHelper.deletePolicy(policy);
})
.setNegativeButton(R.string.no_thanks, null)
.setCancelable(true)
.show());
holder.delete.setOnClickListener(v -> {
DialogInterface.OnClickListener l = (dialog, which) -> {
policyList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, policyList.size());
SnackbarMaker.make(holder.itemView, v.getContext().getString(R.string.su_snack_revoke, policy.appName),
Snackbar.LENGTH_SHORT).show();
dbHelper.deletePolicy(policy);
};
if (FingerprintHelper.useFingerprint()) {
new FingerprintAuthDialog((Activity) v.getContext(),
() -> l.onClick(null, 0)).show();
} else {
new CustomAlertDialog((Activity) v.getContext())
.setTitle(R.string.su_revoke_title)
.setMessage(v.getContext().getString(R.string.su_revoke_msg, policy.appName))
.setPositiveButton(R.string.yes, l)
.setNegativeButton(R.string.no_thanks, null)
.setCancelable(true)
.show();
}
});
}
@Override
@@ -150,12 +161,12 @@ public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder
@BindView(R.id.delete) ImageView delete;
@BindView(R.id.more_info) ImageView moreInfo;
ExpandableViewHolder settings;
Expandable settings;
public ViewHolder(View itemView) {
super(itemView);
new PolicyAdapter$ViewHolder_ViewBinding(this, itemView);
settings = new ArrowExpandedViewHolder(expandLayout, arrow);
settings = new ArrowExpandable(new ExpandableViewHolder(expandLayout), arrow);
}
}
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.content.Context;
import android.content.Intent;
@@ -10,44 +10,52 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SearchView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.components.BaseActivity;
import com.topjohnwu.magisk.components.DownloadModuleService;
import com.topjohnwu.magisk.container.Module;
import com.topjohnwu.magisk.container.Repo;
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.dialogs.CustomAlertDialog;
import com.topjohnwu.magisk.uicomponents.MarkDownWindow;
import com.topjohnwu.magisk.data.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.model.download.DownloadModuleService;
import com.topjohnwu.magisk.model.entity.Module;
import com.topjohnwu.magisk.model.entity.Repo;
import com.topjohnwu.magisk.ui.base.BaseActivity;
import com.topjohnwu.magisk.utils.Event;
import com.topjohnwu.magisk.view.MarkDownWindow;
import com.topjohnwu.magisk.view.dialogs.CustomAlertDialog;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import java9.util.stream.StreamSupport;
public class ReposAdapter extends SectionedAdapter<ReposAdapter.SectionHolder, ReposAdapter.RepoHolder> {
public class ReposAdapter
extends SectionedAdapter<ReposAdapter.SectionHolder, ReposAdapter.RepoHolder>
implements Event.AutoListener, SearchView.OnQueryTextListener {
private static final int UPDATES = 0;
private static final int INSTALLED = 1;
private static final int OTHERS = 2;
private Cursor repoCursor = null;
private Map<String, Module> moduleMap;
private RepoDatabaseHelper repoDB;
private List<Pair<Integer, List<Repo>>> repoPairs;
private List<Repo> fullList;
private SearchView mSearch;
public ReposAdapter(RepoDatabaseHelper db, Map<String, Module> map) {
repoDB = db;
moduleMap = map;
public ReposAdapter() {
repoDB = App.self.repoDB;
moduleMap = Collections.emptyMap();
fullList = Collections.emptyList();
repoPairs = new ArrayList<>();
notifyDBChanged();
}
@Override
public int getSectionCount() {
return repoPairs.size();
@@ -131,41 +139,73 @@ public class ReposAdapter extends SectionedAdapter<ReposAdapter.SectionHolder, R
});
}
public void notifyDBChanged() {
if (repoCursor != null)
repoCursor.close();
repoCursor = repoDB.getRepoCursor();
filter("");
private void updateLists() {
if (mSearch != null)
onQueryTextChange(mSearch.getQuery().toString());
else
onQueryTextChange("");
}
public void filter(String s) {
private static boolean noCaseContain(String a, String b) {
return a.toLowerCase().contains(b.toLowerCase());
}
public void setSearchView(SearchView view) {
mSearch = view;
mSearch.setOnQueryTextListener(this);
}
public void notifyDBChanged(boolean refresh) {
try (Cursor c = repoDB.getRepoCursor()) {
fullList = new ArrayList<>(c.getCount());
while (c.moveToNext())
fullList.add(new Repo(c));
}
if (refresh)
updateLists();
}
@Override
public void onEvent(int event) {
moduleMap = Event.getResult(event);
updateLists();
}
@Override
public int[] getListeningEvents() {
return new int[] {Event.MODULE_LOAD_DONE};
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
List<Repo> updates = new ArrayList<>();
List<Repo> installed = new ArrayList<>();
List<Repo> others = new ArrayList<>();
repoPairs.clear();
while (repoCursor.moveToNext()) {
Repo repo = new Repo(repoCursor);
if (repo.getName().toLowerCase().contains(s.toLowerCase())
|| repo.getAuthor().toLowerCase().contains(s.toLowerCase())
|| repo.getDescription().toLowerCase().contains(s.toLowerCase())
) {
// Passed the repoFilter
Module module = moduleMap.get(repo.getId());
if (module != null) {
if (repo.getVersionCode() > module.getVersionCode()) {
// Updates
updates.add(repo);
StreamSupport.stream(fullList)
.filter(repo -> noCaseContain(repo.getName(), s)
|| noCaseContain(repo.getAuthor(), s)
|| noCaseContain(repo.getDescription(), s))
.forEach(repo -> {
Module module = moduleMap.get(repo.getId());
if (module != null) {
if (repo.getVersionCode() > module.getVersionCode()) {
// Updates
updates.add(repo);
} else {
installed.add(repo);
}
} else {
installed.add(repo);
others.add(repo);
}
} else {
others.add(repo);
}
}
}
repoCursor.moveToFirst();
});
repoPairs.clear();
if (!updates.isEmpty())
repoPairs.add(new Pair<>(UPDATES, updates));
if (!installed.isEmpty())
@@ -174,6 +214,7 @@ public class ReposAdapter extends SectionedAdapter<ReposAdapter.SectionHolder, R
repoPairs.add(new Pair<>(OTHERS, others));
notifyDataSetChanged();
return false;
}
static class SectionHolder extends RecyclerView.ViewHolder {

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.view.ViewGroup;
@@ -44,7 +44,7 @@ public abstract class SectionedAdapter<S extends RecyclerView.ViewHolder, C exte
if (info.position == -1)
return SECTION_TYPE;
else
return getItemViewType(info.section, info.position);
return getItemViewType(info.section, info.position);
}
public int getItemViewType(int section, int position) {

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.app.Activity;
import android.util.DisplayMetrics;
@@ -7,13 +7,13 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import androidx.annotation.IdRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public abstract class StringListAdapter<VH extends StringListAdapter.ViewHolder>
extends RecyclerView.Adapter<VH> {
@@ -73,7 +73,7 @@ public abstract class StringListAdapter<VH extends StringListAdapter.ViewHolder>
((Activity) rv.getContext()).getWindowManager()
.getDefaultDisplay().getMetrics(displayMetrics);
screenWidth = displayMetrics.widthPixels;
padding = rv.getPaddingLeft() + rv.getPaddingRight();
padding = rv.getPaddingStart() + rv.getPaddingEnd();
this.rv = rv;
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import android.content.Context;
import android.view.LayoutInflater;
@@ -9,17 +9,18 @@ import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.container.SuLogEntry;
import com.topjohnwu.magisk.database.MagiskDB;
import com.topjohnwu.magisk.uicomponents.ExpandableViewHolder;
import com.topjohnwu.magisk.data.database.MagiskDB;
import com.topjohnwu.magisk.model.entity.SuLogEntry;
import com.topjohnwu.magisk.view.ExpandableViewHolder;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
public class SuLogAdapter extends SectionedAdapter<SuLogAdapter.SectionHolder, SuLogAdapter.LogViewHolder> {

View File

@@ -1,13 +1,13 @@
package com.topjohnwu.magisk.adapters;
package com.topjohnwu.magisk.model.adapters;
import java.util.ArrayList;
import java.util.List;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class TabFragmentAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;

View File

@@ -0,0 +1,156 @@
package com.topjohnwu.magisk.model.download;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.net.Uri;
import android.os.IBinder;
import androidx.annotation.Nullable;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.model.entity.Repo;
import com.topjohnwu.magisk.ui.flash.FlashActivity;
import com.topjohnwu.magisk.view.Notifications;
import com.topjohnwu.magisk.view.ProgressNotification;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class DownloadModuleService extends Service {
private List<ProgressNotification> notifications;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
notifications = new ArrayList<>();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Shell.EXECUTOR.execute(() -> {
Repo repo = intent.getParcelableExtra("repo");
boolean install = intent.getBooleanExtra("install", false);
dlProcessInstall(repo, install);
});
return START_REDELIVER_INTENT;
}
@Override
public synchronized void onTaskRemoved(Intent rootIntent) {
for (ProgressNotification n : notifications) {
Notifications.mgr.cancel(n.hashCode());
}
notifications.clear();
}
private synchronized void addNotification(ProgressNotification n) {
if (notifications.isEmpty()) {
// Start foreground
startForeground(n.hashCode(), n.getNotification());
}
notifications.add(n);
}
private synchronized void removeNotification(ProgressNotification n) {
notifications.remove(n);
if (notifications.isEmpty()) {
// No more tasks, stop service
stopForeground(true);
stopSelf();
} else {
// Pick another notification as our foreground notification
n = notifications.get(0);
startForeground(n.hashCode(), n.getNotification());
}
}
private void dlProcessInstall(Repo repo, boolean install) {
File output = new File(Const.EXTERNAL_PATH, repo.getDownloadFilename());
ProgressNotification progress = new ProgressNotification(output.getName());
addNotification(progress);
try {
InputStream in = Networking.get(repo.getZipUrl())
.setDownloadProgressListener(progress)
.execForInputStream().getResult();
OutputStream out = new BufferedOutputStream(new FileOutputStream(output));
processZip(in, out);
Intent intent = new Intent(this, ClassMap.get(FlashActivity.class));
intent.setData(Uri.fromFile(output))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(Const.Key.FLASH_ACTION, Const.Value.FLASH_ZIP);
synchronized (getApplication()) {
if (install && App.foreground() != null &&
!(App.foreground() instanceof FlashActivity)) {
/* Only start flashing if there is a foreground activity and the
* user is not also flashing another module at the same time */
App.foreground().startActivity(intent);
} else {
/* Or else we preset a notification notifying that we are done */
PendingIntent pi = PendingIntent.getActivity(this, progress.hashCode(), intent,
PendingIntent.FLAG_UPDATE_CURRENT);
progress.dlDone(pi);
}
}
} catch (Exception e) {
e.printStackTrace();
progress.dlFail();
}
removeNotification(progress);
}
private void processZip(InputStream in, OutputStream out)
throws IOException {
try (ZipInputStream zin = new ZipInputStream(in);
ZipOutputStream zout = new ZipOutputStream(out)) {
// Inject latest module-installer.sh as update-binary
zout.putNextEntry(new ZipEntry("META-INF/"));
zout.putNextEntry(new ZipEntry("META-INF/com/"));
zout.putNextEntry(new ZipEntry("META-INF/com/google/"));
zout.putNextEntry(new ZipEntry("META-INF/com/google/android/"));
zout.putNextEntry(new ZipEntry("META-INF/com/google/android/update-binary"));
try (InputStream update_bin = Networking.get(Const.Url.MODULE_INSTALLER)
.execForInputStream().getResult()) {
ShellUtils.pump(update_bin, zout);
}
zout.putNextEntry(new ZipEntry("META-INF/com/google/android/updater-script"));
zout.write("#MAGISK\n".getBytes("UTF-8"));
int off = -1;
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
if (off < 0)
off = entry.getName().indexOf('/') + 1;
String path = entry.getName().substring(off);
if (path.isEmpty())
continue;
if (path.startsWith("META-INF"))
continue;
zout.putNextEntry(new ZipEntry(path));
if (!entry.isDirectory())
ShellUtils.pump(zin, zout);
}
}
}
}

View File

@@ -1,18 +1,18 @@
package com.topjohnwu.magisk.container;
package com.topjohnwu.magisk.model.entity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
import androidx.annotation.NonNull;
import java.util.List;
public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
private String mId, mName, mVersion, mAuthor, mDescription;
private int mVersionCode = -1, minMagiskVersion = -1;
private int mVersionCode = -1;
protected BaseModule() {
mId = mName = mVersion = mAuthor = mDescription = "";
@@ -25,7 +25,6 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
mVersionCode = c.getInt(c.getColumnIndex("versionCode"));
mAuthor = nonNull(c.getString(c.getColumnIndex("author")));
mDescription = nonNull(c.getString(c.getColumnIndex("description")));
minMagiskVersion = c.getInt(c.getColumnIndex("minMagisk"));
}
protected BaseModule(Parcel p) {
@@ -35,7 +34,6 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
mAuthor = p.readString();
mDescription = p.readString();
mVersionCode = p.readInt();
minMagiskVersion = p.readInt();
}
@Override
@@ -56,7 +54,6 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
dest.writeString(mAuthor);
dest.writeString(mDescription);
dest.writeInt(mVersionCode);
dest.writeInt(minMagiskVersion);
}
private String nonNull(String s) {
@@ -71,7 +68,6 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
values.put("versionCode", mVersionCode);
values.put("author", mAuthor);
values.put("description", mDescription);
values.put("minMagisk", minMagiskVersion);
return values;
}
@@ -107,10 +103,6 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
case "description":
mDescription = value;
break;
case "minMagisk":
case "template":
minMagiskVersion = Integer.parseInt(value);
break;
default:
break;
}
@@ -149,7 +141,4 @@ public abstract class BaseModule implements Comparable<BaseModule>, Parcelable {
return mVersionCode;
}
public int getMinMagiskVersion() {
return minMagiskVersion;
}
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.container;
package com.topjohnwu.magisk.model.entity;
import android.os.Parcel;
import android.os.Parcelable;
@@ -76,4 +76,4 @@ public class Module extends BaseModule {
return mUpdated;
}
}
}

View File

@@ -1,13 +1,13 @@
package com.topjohnwu.magisk.container;
package com.topjohnwu.magisk.model.entity;
import android.content.ContentValues;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import com.topjohnwu.magisk.utils.Utils;
import androidx.annotation.NonNull;
import com.topjohnwu.magisk.utils.Utils;
public class Policy implements Comparable<Policy>{
public static final int INTERACTIVE = 0;

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.container;
package com.topjohnwu.magisk.model.entity;
import android.content.ContentValues;
import android.database.Cursor;
@@ -6,7 +6,6 @@ import android.os.Parcel;
import android.os.Parcelable;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.utils.Logger;
import com.topjohnwu.magisk.utils.Utils;
import java.text.DateFormat;
@@ -60,9 +59,6 @@ public class Repo extends BaseModule {
if (getVersionCode() < 0) {
throw new IllegalRepoException("Repo [" + getId() + "] does not contain versionCode");
}
if (getMinMagiskVersion() < Const.MIN_MODULE_VER) {
Logger.debug("Repo [" + getId() + "] is outdated");
}
}
public void update(Date lastUpdate) throws IllegalRepoException {
@@ -82,11 +78,15 @@ public class Repo extends BaseModule {
}
public String getPropUrl() {
return String.format(Const.Url.FILE_URL, getId(), "module.prop");
return getFileUrl("module.prop");
}
public String getDetailUrl() {
return String.format(Const.Url.FILE_URL, getId(), "README.md");
return getFileUrl("README.md");
}
public String getFileUrl(String file) {
return String.format(Const.Url.FILE_URL, getId(), file);
}
public String getLastUpdateString() {

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.container;
package com.topjohnwu.magisk.model.entity;
import android.content.ContentValues;

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.components;
package com.topjohnwu.magisk.model.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -8,25 +8,15 @@ import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.SuRequestActivity;
import com.topjohnwu.magisk.container.Policy;
import com.topjohnwu.magisk.uicomponents.Notifications;
import com.topjohnwu.magisk.uicomponents.Shortcuts;
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity;
import com.topjohnwu.magisk.utils.DownloadApp;
import com.topjohnwu.magisk.utils.SuLogger;
import com.topjohnwu.magisk.view.Notifications;
import com.topjohnwu.magisk.view.Shortcuts;
import com.topjohnwu.superuser.Shell;
public class GeneralReceiver extends BroadcastReceiver {
private static SuLogger SU_LOGGER = new SuLogger() {
@Override
public String getMessage(Policy policy) {
return App.self.getString(policy.policy == Policy.ALLOW ?
R.string.su_allow_toast : R.string.su_deny_toast, policy.appName);
}
};
private String getPkg(Intent i) {
return i.getData() == null ? "" : i.getData().getEncodedSchemeSpecificPart();
}
@@ -40,36 +30,31 @@ public class GeneralReceiver extends BroadcastReceiver {
if (action == null)
return;
switch (action) {
case Intent.ACTION_REBOOT:
case Intent.ACTION_BOOT_COMPLETED:
String bootAction = intent.getStringExtra("action");
if (bootAction == null)
bootAction = "boot";
switch (bootAction) {
case "request":
action = intent.getStringExtra("action");
if (action == null) {
// Actual boot completed event
Shell.su("mm_patch_dtbo").submit(result -> {
if (result.isSuccess())
Notifications.dtboPatched();
});
break;
}
switch (action) {
case SuRequestActivity.REQUEST:
Intent i = new Intent(app, ClassMap.get(SuRequestActivity.class))
.setAction(action)
.putExtra("socket", intent.getStringExtra("socket"))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
app.startActivity(i);
break;
case "log":
SU_LOGGER.handleLogs(intent);
case SuRequestActivity.LOG:
SuLogger.handleLogs(intent);
break;
case "notify":
SU_LOGGER.handleNotify(intent);
break;
case "boot":
default:
/* Devices with DTBO might want to patch dtbo.img.
* However, that is not possible if Magisk is installed by
* patching boot image with Magisk Manager and flashed via
* fastboot, since at that time we do not have root.
* Check for dtbo status every boot time, and prompt user
* to reboot if dtbo wasn't patched and patched by Magisk Manager.
* */
Shell.su("mm_patch_dtbo").submit(result -> {
if (result.isSuccess())
Notifications.dtboPatched();
});
case SuRequestActivity.NOTIFY:
SuLogger.handleNotify(intent);
break;
}
break;

View File

@@ -1,21 +1,25 @@
package com.topjohnwu.magisk.components;
import com.topjohnwu.magisk.BuildConfig;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.tasks.CheckUpdates;
import com.topjohnwu.magisk.uicomponents.Notifications;
import com.topjohnwu.superuser.Shell;
package com.topjohnwu.magisk.model.update;
import androidx.annotation.NonNull;
import androidx.work.ListenableWorker;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.BuildConfig;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.model.worker.DelegateWorker;
import com.topjohnwu.magisk.tasks.CheckUpdates;
import com.topjohnwu.magisk.view.Notifications;
import com.topjohnwu.superuser.Shell;
public class UpdateCheckService extends DelegateWorker {
@NonNull
@Override
public ListenableWorker.Result doWork() {
Shell.getShell();
CheckUpdates.checkNow(this::onCheckDone);
if (App.foreground() == null) {
Shell.getShell();
CheckUpdates.check(this::onCheckDone);
}
return ListenableWorker.Result.success();
}

View File

@@ -1,15 +1,9 @@
package com.topjohnwu.magisk.components;
package com.topjohnwu.magisk.model.worker;
import android.content.Context;
import android.net.Network;
import android.net.Uri;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -17,6 +11,12 @@ import androidx.annotation.RequiresApi;
import androidx.work.Data;
import androidx.work.ListenableWorker;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public abstract class DelegateWorker {
private ListenableWorker worker;

View File

@@ -4,10 +4,11 @@ import android.os.SystemClock;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.utils.Topic;
import com.topjohnwu.magisk.utils.Event;
import com.topjohnwu.net.Networking;
import com.topjohnwu.net.Request;
import com.topjohnwu.net.ResponseListener;
import com.topjohnwu.superuser.ShellUtils;
import com.topjohnwu.superuser.internal.UiThreadHandler;
import org.json.JSONException;
@@ -24,7 +25,12 @@ public class CheckUpdates {
case Config.Value.CUSTOM_CHANNEL:
url = Config.get(Config.Key.CUSTOM_CHANNEL);
break;
case Config.Value.STABLE_CHANNEL:
case Config.Value.CANARY_CHANNEL:
url = Const.Url.CANARY_URL;
break;
case Config.Value.CANARY_DEBUG_CHANNEL:
url = Const.Url.CANARY_DEBUG_URL;
break;
default:
url = Const.Url.STABLE_URL;
break;
@@ -33,13 +39,19 @@ public class CheckUpdates {
}
public static void check() {
getRequest().getAsJSONObject(new UpdateListener(null));
check(null);
}
public static void checkNow(Runnable cb) {
JSONObject json = getRequest().execForJSONObject().getResult();
if (json != null)
new UpdateListener(cb).onResponse(json);
public static void check(Runnable cb) {
Request request = getRequest();
UpdateListener listener = new UpdateListener(cb);
if (ShellUtils.onMainThread()) {
request.getAsJSONObject(listener);
} else {
JSONObject json = request.execForJSONObject().getResult();
if (json != null)
listener.onResponse(json);
}
}
private static class UpdateListener implements ResponseListener<JSONObject> {
@@ -83,8 +95,20 @@ public class CheckUpdates {
@Override
public void onResponse(JSONObject json) {
JSONObject magisk = getJson(json, "magisk");
Config.remoteMagiskVersionString = getString(magisk, "version", null);
Config.remoteMagiskVersionCode = getInt(magisk, "versionCode", -1);
if ((int) Config.get(Config.Key.UPDATE_CHANNEL) == Config.Value.DEFAULT_CHANNEL) {
if (Config.magiskVersionCode > Config.remoteMagiskVersionCode) {
// If we are newer than current stable channel, switch to beta
Config.set(Config.Key.UPDATE_CHANNEL, Config.Value.BETA_CHANNEL);
check(cb);
return;
} else {
Config.set(Config.Key.UPDATE_CHANNEL, Config.Value.STABLE_CHANNEL);
}
}
Config.remoteMagiskVersionString = getString(magisk, "version", null);
Config.magiskLink = getString(magisk, "link", null);
Config.magiskNoteLink = getString(magisk, "note", null);
Config.magiskMD5 = getString(magisk, "md5", null);
@@ -98,7 +122,7 @@ public class CheckUpdates {
JSONObject uninstaller = getJson(json, "uninstaller");
Config.uninstallerLink = getString(uninstaller, "link", null);
UiThreadHandler.handler.postAtTime(() -> Topic.publish(Topic.UPDATE_CHECK_DONE),
UiThreadHandler.handler.postAtTime(() -> Event.trigger(Event.UPDATE_CHECK_DONE),
start + 1000 /* Add artificial delay to let UI behave correctly */);
if (cb != null)

View File

@@ -4,10 +4,12 @@ import android.net.Uri;
import android.os.Build;
import android.text.TextUtils;
import androidx.annotation.MainThread;
import androidx.annotation.WorkerThread;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.container.TarEntry;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.DownloadProgressListener;
import com.topjohnwu.net.Networking;
@@ -20,6 +22,8 @@ import com.topjohnwu.superuser.io.SuFile;
import com.topjohnwu.superuser.io.SuFileInputStream;
import com.topjohnwu.superuser.io.SuFileOutputStream;
import org.kamranzafar.jtar.TarEntry;
import org.kamranzafar.jtar.TarHeader;
import org.kamranzafar.jtar.TarInputStream;
import org.kamranzafar.jtar.TarOutputStream;
@@ -27,25 +31,25 @@ import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import androidx.annotation.MainThread;
import androidx.annotation.WorkerThread;
public abstract class MagiskInstaller {
private List<String> console, logs;
protected String srcBoot;
protected File destFile;
protected File installDir;
private List<String> console, logs;
private boolean isTar = false;
private class ProgressLog implements DownloadProgressListener {
private int prev = -1;
@@ -73,18 +77,18 @@ public abstract class MagiskInstaller {
public MagiskInstaller(List<String> out, List<String> err) {
console = out;
logs = err;
installDir = new File(Utils.getDEContext().getFilesDir().getParent(), "install");
installDir = new File(App.deContext.getFilesDir().getParent(), "install");
Shell.sh("rm -rf " + installDir).exec();
installDir.mkdirs();
}
protected boolean findImage() {
console.add("- Detecting target image");
srcBoot = ShellUtils.fastCmd("find_boot_image", "echo \"$BOOTIMAGE\"");
if (srcBoot.isEmpty()) {
console.add("! Unable to detect target image");
return false;
}
console.add("- Target image: " + srcBoot);
return true;
}
@@ -92,7 +96,6 @@ public abstract class MagiskInstaller {
String slot = ShellUtils.fastCmd("echo $SLOT");
String target = (TextUtils.equals(slot, "_a") ? "_b" : "_a");
console.add("- Target slot: " + target);
console.add("- Detecting target image");
srcBoot = ShellUtils.fastCmd(
"SLOT=" + target,
"find_boot_image",
@@ -103,12 +106,13 @@ public abstract class MagiskInstaller {
console.add("! Unable to detect target image");
return false;
}
console.add("- Target image: " + srcBoot);
return true;
}
protected boolean extractZip() {
String arch;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (Build.VERSION.SDK_INT >= 21) {
List<String> abis = Arrays.asList(Build.SUPPORTED_ABIS);
arch = abis.contains("x86") ? "x86" : "arm";
} else {
@@ -147,12 +151,9 @@ public abstract class MagiskInstaller {
name = ze.getName();
if (name == null)
continue;
File dest;
if (installDir instanceof SuFile) {
dest = new SuFile(installDir, name);
} else {
dest = new File(installDir, name);
}
File dest = (installDir instanceof SuFile) ?
new SuFile(installDir, name) :
new File(installDir, name);
dest.getParentFile().mkdirs();
try (OutputStream out = new SuFileOutputStream(dest)) {
ShellUtils.pump(zi, out);
@@ -162,40 +163,108 @@ public abstract class MagiskInstaller {
console.add("! Cannot unzip zip");
return false;
}
Shell.sh(Utils.fmt("chmod -R 755 %s/*; %s/magiskinit -x magisk %s/magisk",
installDir, installDir, installDir)).exec();
File init64 = SuFile.open(installDir, "magiskinit64");
if (Build.VERSION.SDK_INT >= 21 && Build.SUPPORTED_64_BIT_ABIS.length != 0) {
init64.renameTo(SuFile.open(installDir, "magiskinit"));
} else {
init64.delete();
}
Shell.sh("cd " + installDir, "chmod 755 *").exec();
return true;
}
protected boolean copyBoot(Uri bootUri) {
srcBoot = new File(installDir, "boot.img").getPath();
console.add("- Copying image to cache");
// Copy boot image to local
try (InputStream in = App.self.getContentResolver().openInputStream(bootUri);
OutputStream out = new FileOutputStream(srcBoot)) {
if (in == null)
throw new FileNotFoundException();
private TarEntry newEntry(String name, long size) {
console.add("-- Writing: " + name);
return new TarEntry(TarHeader.createHeader(name, size, 0, false, 0644));
}
InputStream src;
if (Utils.getNameFromUri(App.self, bootUri).endsWith(".tar")) {
// Extract boot.img from tar
TarInputStream tar = new TarInputStream(new BufferedInputStream(in));
org.kamranzafar.jtar.TarEntry entry;
while ((entry = tar.getNextEntry()) != null) {
if (entry.getName().equals("boot.img"))
break;
private void handleTar(InputStream in) throws IOException {
console.add("- Processing tar file");
boolean vbmeta = false;
try (TarInputStream tarIn = new TarInputStream(in);
TarOutputStream tarOut = new TarOutputStream(destFile)) {
TarEntry entry;
while ((entry = tarIn.getNextEntry()) != null) {
if (entry.getName().contains("boot.img")
|| entry.getName().contains("recovery.img")) {
String name = entry.getName();
console.add("-- Extracting: " + name);
File extract = new File(installDir, name);
try (FileOutputStream fout = new FileOutputStream(extract)) {
ShellUtils.pump(tarIn, fout);
}
if (name.contains(".lz4")) {
console.add("-- Decompressing: " + name);
Shell.sh("./magiskboot --decompress " + extract).to(console).exec();
}
} else if (entry.getName().contains("vbmeta.img")) {
vbmeta = true;
ByteBuffer buf = ByteBuffer.allocate(256);
buf.put("AVB0".getBytes()); // magic
buf.putInt(1); // required_libavb_version_major
buf.putInt(120, 2); // flags
buf.position(128); // release_string
buf.put("avbtool 1.1.0".getBytes());
tarOut.putNextEntry(newEntry("vbmeta.img", 256));
tarOut.write(buf.array());
} else {
console.add("-- Writing: " + entry.getName());
tarOut.putNextEntry(entry);
ShellUtils.pump(tarIn, tarOut);
}
}
File boot = SuFile.open(installDir, "boot.img");
File recovery = SuFile.open(installDir, "recovery.img");
if (vbmeta && recovery.exists() && boot.exists()) {
// Install Magisk to recovery
srcBoot = recovery.getPath();
// Repack boot image to prevent restore
Shell.sh(
"./magiskboot --unpack boot.img",
"./magiskboot --repack boot.img",
"./magiskboot --cleanup",
"mv new-boot.img boot.img").exec();
try (InputStream sin = new SuFileInputStream(boot)) {
tarOut.putNextEntry(newEntry("boot.img", boot.length()));
ShellUtils.pump(sin, tarOut);
}
boot.delete();
} else {
if (!boot.exists()) {
console.add("! No boot image found");
throw new IOException();
}
srcBoot = boot.getPath();
}
}
}
protected boolean handleFile(Uri uri) {
try (InputStream in = new BufferedInputStream(App.self.getContentResolver().openInputStream(uri))) {
in.mark(500);
byte[] magic = new byte[5];
if (in.skip(257) != 257 || in.read(magic) != magic.length) {
console.add("! Invalid file");
return false;
}
in.reset();
if (Arrays.equals(magic, "ustar".getBytes())) {
isTar = true;
destFile = new File(Const.EXTERNAL_PATH, "magisk_patched.tar");
handleTar(in);
} else {
// Raw image
srcBoot = new File(installDir, "boot.img").getPath();
destFile = new File(Const.EXTERNAL_PATH, "magisk_patched.img");
console.add("- Copying image to cache");
try (OutputStream out = new FileOutputStream(srcBoot)) {
ShellUtils.pump(in, out);
}
src = tar;
} else {
// Direct copy raw image
src = new BufferedInputStream(in);
}
ShellUtils.pump(src, out);
} catch (FileNotFoundException e) {
console.add("! Invalid Uri");
return false;
} catch (IOException e) {
console.add("! Copy failed");
console.add("! Process error");
e.printStackTrace();
return false;
}
return true;
@@ -213,14 +282,15 @@ public abstract class MagiskInstaller {
return false;
}
// Patch boot image
if (!Shell.sh(Utils.fmt("cd %s; KEEPFORCEENCRYPT=%b KEEPVERITY=%b " +
"sh update-binary indep boot_patch.sh %s",
installDir, Config.keepEnc, Config.keepVerity, srcBoot))
if (!Shell.sh(Utils.fmt(
"KEEPFORCEENCRYPT=%b KEEPVERITY=%b RECOVERYMODE=%b " +
"sh update-binary sh boot_patch.sh %s",
Config.keepEnc, Config.keepVerity, Config.recovery, srcBoot))
.to(console, logs).exec().isSuccess())
return false;
Shell.Job job = Shell.sh("mv bin/busybox busybox",
Shell.Job job = Shell.sh("./magiskboot --cleanup",
"mv bin/busybox busybox",
"rm -rf magisk.apk bin boot.img update-binary",
"cd /");
@@ -245,40 +315,35 @@ public abstract class MagiskInstaller {
.to(console, logs).exec().isSuccess())
return false;
if (!Config.keepVerity)
Shell.su("find_dtbo_image", "patch_dtbo_image").to(console, logs).exec();
Shell.su("patch_dtbo_image").to(console, logs).exec();
return true;
}
protected boolean storeBoot() {
File patched = new File(installDir, "new-boot.img");
String fmt = Config.get(Config.Key.BOOT_FORMAT);
File dest = new File(Const.EXTERNAL_PATH, "patched_boot" + fmt);
dest.getParentFile().mkdirs();
OutputStream os;
File patched = SuFile.open(installDir, "new-boot.img");
try {
switch (fmt) {
case ".img.tar":
os = new TarOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));
((TarOutputStream) os).putNextEntry(new TarEntry(patched, "boot.img"));
break;
default:
case ".img":
os = new BufferedOutputStream(new FileOutputStream(dest));
break;
OutputStream os;
if (isTar) {
os = new TarOutputStream(destFile, true);
((TarOutputStream) os).putNextEntry(newEntry(
srcBoot.contains("recovery") ? "recovery.img" : "boot.img",
patched.length()));
} else {
os = new BufferedOutputStream(new FileOutputStream(destFile));
}
try (InputStream in = new SuFileInputStream(patched)) {
ShellUtils.pump(in, os);
os.close();
try (InputStream in = new SuFileInputStream(patched);
OutputStream out = os) {
ShellUtils.pump(in, out);
}
} catch (IOException e) {
console.add("! Failed to store boot to " + dest);
return false;
console.add("! Failed to output to " + destFile);
e.printStackTrace();
}
Shell.sh("rm -f " + patched).exec();
patched.delete();
console.add("");
console.add("****************************");
console.add(" Patched image is placed in ");
console.add(" " + dest + " ");
console.add(" Output file is placed in ");
console.add(" " + destFile + " ");
console.add("****************************");
return true;
}

View File

@@ -6,9 +6,9 @@ import android.util.Pair;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.container.Repo;
import com.topjohnwu.magisk.model.entity.Repo;
import com.topjohnwu.magisk.utils.Event;
import com.topjohnwu.magisk.utils.Logger;
import com.topjohnwu.magisk.utils.Topic;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.net.Request;
@@ -155,7 +155,7 @@ public class UpdateRepos {
}
public void exec(boolean force) {
Topic.reset(Topic.REPO_LOAD_DONE);
Event.reset(Event.REPO_LOAD_DONE);
App.THREAD_POOL.execute(() -> {
cached = Collections.synchronizedSet(app.repoDB.getRepoIDSet());
moduleQueue = new ConcurrentLinkedQueue<>();
@@ -166,7 +166,7 @@ public class UpdateRepos {
} else if (force) {
fullReload();
}
Topic.publish(Topic.REPO_LOAD_DONE);
Event.trigger(Event.REPO_LOAD_DONE);
});
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk;
package com.topjohnwu.magisk.ui;
import android.content.Intent;
import android.os.Build;
@@ -8,30 +8,34 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.material.navigation.NavigationView;
import com.topjohnwu.magisk.components.BaseActivity;
import com.topjohnwu.magisk.fragments.LogFragment;
import com.topjohnwu.magisk.fragments.MagiskFragment;
import com.topjohnwu.magisk.fragments.MagiskHideFragment;
import com.topjohnwu.magisk.fragments.ModulesFragment;
import com.topjohnwu.magisk.fragments.ReposFragment;
import com.topjohnwu.magisk.fragments.SettingsFragment;
import com.topjohnwu.magisk.fragments.SuperuserFragment;
import com.topjohnwu.magisk.utils.Topic;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.google.android.material.navigation.NavigationView;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.ui.base.BaseActivity;
import com.topjohnwu.magisk.ui.hide.MagiskHideFragment;
import com.topjohnwu.magisk.ui.home.MagiskFragment;
import com.topjohnwu.magisk.ui.log.LogFragment;
import com.topjohnwu.magisk.ui.module.ModulesFragment;
import com.topjohnwu.magisk.ui.module.ReposFragment;
import com.topjohnwu.magisk.ui.settings.SettingsFragment;
import com.topjohnwu.magisk.ui.superuser.SuperuserFragment;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import butterknife.BindView;
public class MainActivity extends BaseActivity
implements NavigationView.OnNavigationItemSelectedListener, Topic.Subscriber {
implements NavigationView.OnNavigationItemSelectedListener {
private final Handler mDrawerHandler = new Handler();
private int mDrawerItem;
@@ -50,7 +54,7 @@ public class MainActivity extends BaseActivity
@Override
protected void onCreate(final Bundle savedInstanceState) {
if (!getIntent().getBooleanExtra(Const.Key.FROM_SPLASH, false)) {
if (!SplashActivity.DONE) {
startActivity(new Intent(this, ClassMap.get(SplashActivity.class)));
finish();
}
@@ -58,7 +62,7 @@ public class MainActivity extends BaseActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MainActivity_ViewBinding(this);
checkHideSection();
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.magisk, R.string.magisk) {
@@ -90,12 +94,6 @@ public class MainActivity extends BaseActivity
navigationView.setNavigationItemSelectedListener(this);
}
@Override
protected void onResume() {
super.onResume();
checkHideSection();
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(navigationView)) {
@@ -115,11 +113,6 @@ public class MainActivity extends BaseActivity
return true;
}
@Override
public void onPublish(int topic, Object[] result) {
recreate();
}
public void checkHideSection() {
Menu menu = navigationView.getMenu();
menu.findItem(R.id.magiskhide).setVisible(Shell.rootAccess() &&

View File

@@ -1,25 +1,32 @@
package com.topjohnwu.magisk;
package com.topjohnwu.magisk.ui;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.TextUtils;
import com.topjohnwu.magisk.components.BaseActivity;
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
import androidx.appcompat.app.AlertDialog;
import com.topjohnwu.magisk.BuildConfig;
import com.topjohnwu.magisk.ClassMap;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.data.database.RepoDatabaseHelper;
import com.topjohnwu.magisk.tasks.CheckUpdates;
import com.topjohnwu.magisk.tasks.UpdateRepos;
import com.topjohnwu.magisk.uicomponents.Notifications;
import com.topjohnwu.magisk.uicomponents.Shortcuts;
import com.topjohnwu.magisk.utils.AppUtils;
import com.topjohnwu.magisk.ui.base.BaseActivity;
import com.topjohnwu.magisk.utils.LocaleManager;
import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.magisk.view.Notifications;
import com.topjohnwu.magisk.view.Shortcuts;
import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.Shell;
import androidx.appcompat.app.AlertDialog;
public class SplashActivity extends BaseActivity {
public static boolean DONE = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -63,7 +70,8 @@ public class SplashActivity extends BaseActivity {
Notifications.setup(this);
// Schedule periodic update checks
AppUtils.scheduleUpdateCheck();
Utils.scheduleUpdateCheck();
CheckUpdates.check();
// Setup shortcuts
Shortcuts.setup(this);
@@ -74,7 +82,7 @@ public class SplashActivity extends BaseActivity {
// Magisk working as expected
if (Shell.rootAccess() && Config.magiskVersionCode > 0) {
// Load modules
Utils.loadModules();
Utils.loadModules(false);
// Load repos
if (Networking.checkNetworkStatus(this))
new UpdateRepos().exec();
@@ -82,8 +90,7 @@ public class SplashActivity extends BaseActivity {
Intent intent = new Intent(this, ClassMap.get(MainActivity.class));
intent.putExtra(Const.Key.OPEN_SECTION, getIntent().getStringExtra(Const.Key.OPEN_SECTION));
intent.putExtra(Const.Key.FROM_SPLASH, true);
intent.putExtra(BaseActivity.INTENT_PERM, getIntent().getStringExtra(BaseActivity.INTENT_PERM));
DONE = true;
startActivity(intent);
finish();
}

View File

@@ -1,51 +1,45 @@
package com.topjohnwu.magisk.components;
package com.topjohnwu.magisk.ui.base;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.WindowManager;
import android.widget.Toast;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.LocaleManager;
import com.topjohnwu.magisk.utils.Topic;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.collection.SparseArrayCompat;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public abstract class BaseActivity extends AppCompatActivity implements Topic.AutoSubscriber {
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.magisk.Const;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Event;
import com.topjohnwu.magisk.utils.LocaleManager;
public static final String INTENT_PERM = "perm_dialog";
private static Runnable grantCallback;
public abstract class BaseActivity extends AppCompatActivity implements Event.AutoListener {
static int[] EMPTY_INT_ARRAY = new int[0];
private ActivityResultListener activityResultListener;
private SparseArrayCompat<ActivityResultListener> resultListeners = new SparseArrayCompat<>();
public App app = App.self;
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
public int[] getSubscribedTopics() {
public int[] getListeningEvents() {
return EMPTY_INT_ARRAY;
}
@Override
public void onPublish(int topic, Object[] result) {}
public void onEvent(int event) {}
@StyleRes
public int getDarkTheme() {
@@ -59,19 +53,16 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Topic.subscribe(this);
Event.register(this);
if (getDarkTheme() != -1 && (boolean) Config.get(Config.Key.DARK_THEME)) {
setTheme(getDarkTheme());
}
super.onCreate(savedInstanceState);
String[] perms = getIntent().getStringArrayExtra(INTENT_PERM);
if (perms != null)
ActivityCompat.requestPermissions(this, perms, 0);
}
@Override
protected void onDestroy() {
Topic.unsubscribe(this);
Event.unregister(this);
super.onDestroy();
}
@@ -89,15 +80,22 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
}
}
protected void lockOrientation() {
if (Build.VERSION.SDK_INT < 18)
setRequestedOrientation(getResources().getConfiguration().orientation);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
public void runWithExternalRW(Runnable callback) {
runWithPermission(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, callback);
runWithPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, callback);
}
public void runWithPermission(String[] permissions, Runnable callback) {
runWithPermission(this, permissions, callback);
public void runWithPermissions(String[] permissions, Runnable callback) {
runWithPermissions(this, permissions, callback);
}
public static void runWithPermission(Context context, String[] permissions, Runnable callback) {
public static void runWithPermissions(Context context, String[] permissions, Runnable callback) {
boolean granted = true;
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(context, perm) != PackageManager.PERMISSION_GRANTED)
@@ -109,21 +107,29 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
} else {
// Passed in context should be an activity if not granted, need to show dialog!
if (context instanceof BaseActivity) {
grantCallback = callback;
ActivityCompat.requestPermissions((BaseActivity) context, permissions, 0);
BaseActivity activity = (BaseActivity) context;
int code = callback.hashCode() & 0xFFFF;
activity.resultListeners.put(code, ((i, d) -> callback.run()));
ActivityCompat.requestPermissions(activity, permissions, code);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (activityResultListener != null)
activityResultListener.onActivityResult(requestCode, resultCode, data);
activityResultListener = null;
onActivityResultListener(requestCode, resultCode, data);
}
private void onActivityResultListener(int requestCode, int resultCode, Intent data) {
ActivityResultListener listener = resultListeners.get(requestCode);
if (listener != null) {
resultListeners.remove(requestCode);
listener.onActivityResult(resultCode, data);
}
}
public void startActivityForResult(Intent intent, int requestCode, ActivityResultListener listener) {
activityResultListener = listener;
resultListeners.put(requestCode, listener);
super.startActivityForResult(intent, requestCode);
}
@@ -134,18 +140,14 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
if (result != PackageManager.PERMISSION_GRANTED)
grant = false;
}
if (grant) {
if (grantCallback != null) {
grantCallback.run();
}
} else {
Toast.makeText(this, R.string.no_rw_storage, Toast.LENGTH_LONG).show();
}
grantCallback = null;
if (grant)
onActivityResultListener(requestCode, 0, null);
else
resultListeners.remove(requestCode);
}
public interface ActivityResultListener {
void onActivityResult(int requestCode, int resultCode, Intent data);
void onActivityResult(int resultCode, Intent data);
}
@Override

Some files were not shown because too many files have changed in this diff Show More