mirror of
https://github.com/topjohnwu/Magisk
synced 2025-11-09 00:32:30 +01:00
Compare commits
1157 Commits
manager-v7
...
manager-v8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d5cf8a6fe | ||
|
|
290959f74c | ||
|
|
4d9f58ee72 | ||
|
|
9241246de6 | ||
|
|
58a5d52b78 | ||
|
|
2906178ac3 | ||
|
|
e0afbb647b | ||
|
|
50be50cf6a | ||
|
|
77a9d3a5bc | ||
|
|
f9c7a4c933 | ||
|
|
2b759b84b0 | ||
|
|
1e45c63ea5 | ||
|
|
b14a260827 | ||
|
|
ade1597e03 | ||
|
|
2739d3cb67 | ||
|
|
dc5e78e142 | ||
|
|
e9759a5868 | ||
|
|
e7ab802498 | ||
|
|
42672c2e27 | ||
|
|
e65d61d313 | ||
|
|
076da5c7c4 | ||
|
|
9deaf2507c | ||
|
|
5c114c67de | ||
|
|
d904cb0441 | ||
|
|
bd1dd9d863 | ||
|
|
afebe734b8 | ||
|
|
e21a78164e | ||
|
|
1e0f96d0fd | ||
|
|
bf650332d8 | ||
|
|
f32e0af830 | ||
|
|
4c94f90e5d | ||
|
|
ffb4224640 | ||
|
|
89fff4830b | ||
|
|
16e4c67992 | ||
|
|
cf47214ee4 | ||
|
|
0feab753fb | ||
|
|
d0b6318b90 | ||
|
|
966e23b846 | ||
|
|
5b8a1fc2a7 | ||
|
|
02ea3ca525 | ||
|
|
0632b146b8 | ||
|
|
1b0b180761 | ||
|
|
0d11f73a1d | ||
|
|
533cb8eb58 | ||
|
|
8ac1181e9a | ||
|
|
5ca1892eb0 | ||
|
|
e32db6a0e8 | ||
|
|
82fff615d6 | ||
|
|
24a8f0808d | ||
|
|
4a7c3c06bc | ||
|
|
da93bbc1fe | ||
|
|
fa2dbe981e | ||
|
|
ce6cceae8b | ||
|
|
7b26e8b818 | ||
|
|
2da5fcb00b | ||
|
|
a079966f97 | ||
|
|
468796c23d | ||
|
|
5833aadef5 | ||
|
|
eb261c8026 | ||
|
|
a4c48847d1 | ||
|
|
43288be091 | ||
|
|
1ad7a6fe93 | ||
|
|
4e0a3f5e72 | ||
|
|
d7c33f647d | ||
|
|
9087207dc0 | ||
|
|
2760f37e6b | ||
|
|
3fa3426032 | ||
|
|
2e4dc91b96 | ||
|
|
aaaaa3d044 | ||
|
|
1edc4449d5 | ||
|
|
f3cd4da026 | ||
|
|
872c55207c | ||
|
|
339ca6d666 | ||
|
|
4aeac3b8f4 | ||
|
|
d625beb7f3 | ||
|
|
735b65c50c | ||
|
|
efb1eab327 | ||
|
|
49d4785da0 | ||
|
|
28e65ce383 | ||
|
|
c3b6a48373 | ||
|
|
a42ebd429b | ||
|
|
8f89010752 | ||
|
|
105a18f719 | ||
|
|
eb04ca4c4a | ||
|
|
6092d7ca88 | ||
|
|
66cad101c0 | ||
|
|
0a14f43f9c | ||
|
|
311c1f0dfd | ||
|
|
0499588107 | ||
|
|
d4d837a562 | ||
|
|
fbcbb20178 | ||
|
|
0914700fc6 | ||
|
|
eeced2fb5b | ||
|
|
6509e3d4f5 | ||
|
|
317052604b | ||
|
|
5538f7168c | ||
|
|
dcb9e4cd93 | ||
|
|
d9382f59bf | ||
|
|
403a0c770a | ||
|
|
f0f1cdc501 | ||
|
|
4e272b70ef | ||
|
|
8dc62a0232 | ||
|
|
9225b47568 | ||
|
|
d462873e74 | ||
|
|
fc19b50290 | ||
|
|
333fe6da0e | ||
|
|
75fcda9f81 | ||
|
|
44ba2a9903 | ||
|
|
2fceb1ad96 | ||
|
|
bacb5fa462 | ||
|
|
67f8dc494e | ||
|
|
3e4caabecb | ||
|
|
dcd5183b24 | ||
|
|
d80c6b42a6 | ||
|
|
64effe9385 | ||
|
|
96dd24e91d | ||
|
|
fbb4f85ef0 | ||
|
|
716f06846b | ||
|
|
241f2656fa | ||
|
|
e973d49517 | ||
|
|
c3bf9a095b | ||
|
|
abfc28db32 | ||
|
|
8b5652ced5 | ||
|
|
d6dbab53cd | ||
|
|
46de1ed968 | ||
|
|
9bebe07d5a | ||
|
|
ee4db43136 | ||
|
|
efac220998 | ||
|
|
31026b43f4 | ||
|
|
bc3fbe09f5 | ||
|
|
7ac55068db | ||
|
|
6abd9aa8a4 | ||
|
|
c91ebfbcc1 | ||
|
|
2f232fc670 | ||
|
|
41f5c8d96c | ||
|
|
4fd04e62af | ||
|
|
63a9a7d643 | ||
|
|
a63d6c03fd | ||
|
|
fd552e68a9 | ||
|
|
de4e26b488 | ||
|
|
fa3865e962 | ||
|
|
a6950b8aca | ||
|
|
8df96ff664 | ||
|
|
8b29267ad6 | ||
|
|
0ef92a4866 | ||
|
|
85bef8fa96 | ||
|
|
ca9f9fee9a | ||
|
|
b59e05c63e | ||
|
|
3c0630bfc0 | ||
|
|
bf84dd6518 | ||
|
|
f575155a41 | ||
|
|
bd240ba48c | ||
|
|
106a2bb7df | ||
|
|
82bbbe05b2 | ||
|
|
9956dc0995 | ||
|
|
fc76673802 | ||
|
|
17b5291bbb | ||
|
|
9908dfd79a | ||
|
|
2dbaf9595c | ||
|
|
9a16ab1bd7 | ||
|
|
9e5cb6cb91 | ||
|
|
8c19654d20 | ||
|
|
d5a7a75d9d | ||
|
|
851b676077 | ||
|
|
765b51285a | ||
|
|
8a338de696 | ||
|
|
8a61ae621d | ||
|
|
60e1e07e87 | ||
|
|
e51a3dacb9 | ||
|
|
9a8a27dbb9 | ||
|
|
2eb001876a | ||
|
|
b510dc51ac | ||
|
|
d7f7508fa2 | ||
|
|
e66b0bf3b2 | ||
|
|
0555b73a19 | ||
|
|
877a297de4 | ||
|
|
49559ec0ec | ||
|
|
30e45f863d | ||
|
|
434efec860 | ||
|
|
5022f00a55 | ||
|
|
8aac373ca3 | ||
|
|
c3586fe0a5 | ||
|
|
11f254e5e5 | ||
|
|
c61ec2465f | ||
|
|
fd5ad91d26 | ||
|
|
5c4c391f94 | ||
|
|
4dacffd7a1 | ||
|
|
61599059d5 | ||
|
|
f32a29911b | ||
|
|
b73d5753f2 | ||
|
|
2eee335b5f | ||
|
|
013a2e1336 | ||
|
|
fbaf2bded6 | ||
|
|
38a34a7eeb | ||
|
|
70174e093b | ||
|
|
0333e82e86 | ||
|
|
36a8839cf8 | ||
|
|
d0ed6e7fe3 | ||
|
|
72dfbf5e44 | ||
|
|
114a3c037f | ||
|
|
782adc9a9f | ||
|
|
e0642b018d | ||
|
|
6bd4006652 | ||
|
|
01efe7a4ea | ||
|
|
7e133b0cf4 | ||
|
|
fd808bd51e | ||
|
|
b4e8860ee4 | ||
|
|
fb3f8605fd | ||
|
|
e394445f1b | ||
|
|
ca1b0bf1ce | ||
|
|
bf5798190d | ||
|
|
ca5030a646 | ||
|
|
e22324e434 | ||
|
|
e46d4ecd3e | ||
|
|
84f92bd661 | ||
|
|
b44dcc2da0 | ||
|
|
d6062944f1 | ||
|
|
79f549795b | ||
|
|
eaf7c3c486 | ||
|
|
1ac379c17a | ||
|
|
51a4dbf263 | ||
|
|
2d91bfd9e6 | ||
|
|
e437ffdbae | ||
|
|
ccde8b73a2 | ||
|
|
65f88e4ae2 | ||
|
|
354440ee8a | ||
|
|
59106e4f52 | ||
|
|
d76c266fbc | ||
|
|
31681c9c5f | ||
|
|
0e5a32b476 | ||
|
|
a22a1dd284 | ||
|
|
27c59dbb65 | ||
|
|
fb04e32480 | ||
|
|
14a2f63b8b | ||
|
|
9e81db8692 | ||
|
|
1ed67eed35 | ||
|
|
abc5457136 | ||
|
|
4b238a9cd0 | ||
|
|
f200d472ef | ||
|
|
105b2fc114 | ||
|
|
5ed4071f74 | ||
|
|
551a478fdc | ||
|
|
7c319f5fc3 | ||
|
|
1fcf35ebeb | ||
|
|
6d749a58c6 | ||
|
|
34450cdddd | ||
|
|
846bbb4da1 | ||
|
|
d7a26dbf27 | ||
|
|
a86d5b3e61 | ||
|
|
b2bece9ef6 | ||
|
|
f9cbf883ac | ||
|
|
7f225b3973 | ||
|
|
72e7605fce | ||
|
|
a4c1ddd9f2 | ||
|
|
ddd513110f | ||
|
|
e33d623d40 | ||
|
|
eec19ba9af | ||
|
|
413b3f394b | ||
|
|
88cee1212b | ||
|
|
cf25fa8ed8 | ||
|
|
3f053b8547 | ||
|
|
79aa261ca2 | ||
|
|
ac2a9da4c4 | ||
|
|
d8b1d79879 | ||
|
|
feb0f4b7b5 | ||
|
|
6c8fe46590 | ||
|
|
5e3c9e5022 | ||
|
|
f7f821b93c | ||
|
|
36a70e995f | ||
|
|
537ae1a315 | ||
|
|
87b6bf2c26 | ||
|
|
9df6b0618a | ||
|
|
c7e30ac63e | ||
|
|
f5e547944a | ||
|
|
d10680187d | ||
|
|
f5aa6a3cf8 | ||
|
|
c944277e78 | ||
|
|
2e5402d741 | ||
|
|
24f6024383 | ||
|
|
15b1215972 | ||
|
|
11222c89d4 | ||
|
|
893a8ec8d9 | ||
|
|
da2b00de59 | ||
|
|
1276c28e03 | ||
|
|
e458215f27 | ||
|
|
fee4031d0f | ||
|
|
0835ff88b2 | ||
|
|
2e95d9f07e | ||
|
|
fe2388394d | ||
|
|
7fc9b908d4 | ||
|
|
0ed524f173 | ||
|
|
aed3ab994e | ||
|
|
5347cedfa6 | ||
|
|
5b28a713e0 | ||
|
|
f1fb7404c2 | ||
|
|
fc67c0195f | ||
|
|
2f02f9a580 | ||
|
|
07f712a1ce | ||
|
|
c7044b0d20 | ||
|
|
15866cfba9 | ||
|
|
4c2570628d | ||
|
|
113eec59f9 | ||
|
|
f7abc03dac | ||
|
|
ef3f188a2c | ||
|
|
dd62fe89f7 | ||
|
|
ec2d7d77eb | ||
|
|
6c6368fd81 | ||
|
|
ba31c6b625 | ||
|
|
cad189d2dc | ||
|
|
7cf3da1b3b | ||
|
|
45fabf8e03 | ||
|
|
2c12fe6eb2 | ||
|
|
b41b2283f4 | ||
|
|
e8e7cd5008 | ||
|
|
7873433977 | ||
|
|
52d19d3ea2 | ||
|
|
6348d0a6fb | ||
|
|
f7a650b9a4 | ||
|
|
a97d278bcd | ||
|
|
8647ba4729 | ||
|
|
4631077c49 | ||
|
|
18dab28c32 | ||
|
|
8ffbffddb3 | ||
|
|
f191db2fe0 | ||
|
|
dc8f0f6feb | ||
|
|
01a43b03bd | ||
|
|
86db0cd2cd | ||
|
|
ae6dd50ccd | ||
|
|
77032eced1 | ||
|
|
820427e93b | ||
|
|
89e11c9cc8 | ||
|
|
05cf53fe6f | ||
|
|
97b72a5941 | ||
|
|
7922f65243 | ||
|
|
67f7935421 | ||
|
|
9348c5bad9 | ||
|
|
0f7caa66fb | ||
|
|
bd14994eb9 | ||
|
|
08818e8542 | ||
|
|
706eba329d | ||
|
|
f6a2b1c882 | ||
|
|
c2e6622016 | ||
|
|
53904b0627 | ||
|
|
cef14d4576 | ||
|
|
73203a55ca | ||
|
|
397f7326a3 | ||
|
|
4bbd7989dd | ||
|
|
a0b47f3ca3 | ||
|
|
89e9e7c176 | ||
|
|
ddc2f317ab | ||
|
|
867bab8513 | ||
|
|
b1e0c5ff38 | ||
|
|
6dbd9bfb12 | ||
|
|
3c78344812 | ||
|
|
594f268885 | ||
|
|
93d5716414 | ||
|
|
4b8e92f00a | ||
|
|
fc6ef7dd57 | ||
|
|
c881fd4964 | ||
|
|
4bcc2b2f03 | ||
|
|
6150055a05 | ||
|
|
23a33b4351 | ||
|
|
e02386a6ac | ||
|
|
099e703834 | ||
|
|
1ededc637e | ||
|
|
0850bca9d3 | ||
|
|
6d2fd480bf | ||
|
|
ddf0c379be | ||
|
|
45b5e89912 | ||
|
|
a748d5291a | ||
|
|
f5131fae56 | ||
|
|
f79a40a67a | ||
|
|
43146b8316 | ||
|
|
b71b4bd4e5 | ||
|
|
44895a86b8 | ||
|
|
eecb66f4f1 | ||
|
|
e7f1c03151 | ||
|
|
56602cb9a3 | ||
|
|
1e2f776b83 | ||
|
|
ec3705f2ed | ||
|
|
ae0dcabf43 | ||
|
|
6030b00ee2 | ||
|
|
a17908f6e1 | ||
|
|
cb7148a24c | ||
|
|
2f824f59dc | ||
|
|
ad94f10205 | ||
|
|
02b2290b16 | ||
|
|
f8a814a588 | ||
|
|
4c4338cc02 | ||
|
|
5675a1ae7d | ||
|
|
0952224c3d | ||
|
|
4e26c10287 | ||
|
|
f3e82b9ef1 | ||
|
|
e50295d337 | ||
|
|
fde78be2b4 | ||
|
|
c071ac8973 | ||
|
|
599ee57d39 | ||
|
|
4499cebcd9 | ||
|
|
cd6eca1dc2 | ||
|
|
951273f8ef | ||
|
|
51eeb89f67 | ||
|
|
0efa73d96c | ||
|
|
63512b39b2 | ||
|
|
f392ade78d | ||
|
|
0236ab887e | ||
|
|
d4baae411b | ||
|
|
e02e46d0fc | ||
|
|
3c04dab472 | ||
|
|
fc1844b4df | ||
|
|
99ef20627a | ||
|
|
4497e0aaca | ||
|
|
c3e045e367 | ||
|
|
501d3e6c32 | ||
|
|
b27b9c1d18 | ||
|
|
f7d3d1eeaf | ||
|
|
0d72a4c8ba | ||
|
|
dbdb0a2560 | ||
|
|
18a09703de | ||
|
|
bc6a14d30f | ||
|
|
97db49a57b | ||
|
|
eca2168685 | ||
|
|
1bcef38739 | ||
|
|
aac6ad73da | ||
|
|
122b4d66b6 | ||
|
|
0f8f4e361b | ||
|
|
3733b589ac | ||
|
|
6a2e781db2 | ||
|
|
c6569ce022 | ||
|
|
a62bdc58cb | ||
|
|
912009494d | ||
|
|
a5d7c41d20 | ||
|
|
232ae2a189 | ||
|
|
aa8b23105f | ||
|
|
c113f854a2 | ||
|
|
87de0e7a0e | ||
|
|
85755e3022 | ||
|
|
02dc1172be | ||
|
|
dbf8c41209 | ||
|
|
8c4fd759c6 | ||
|
|
23dc19ad94 | ||
|
|
0c99c4d93f | ||
|
|
8ab045331b | ||
|
|
a8d0936e04 | ||
|
|
4e349acb50 | ||
|
|
947e3b06b4 | ||
|
|
5fd574a14f | ||
|
|
03c1053871 | ||
|
|
c7ed0ef5eb | ||
|
|
2aede97754 | ||
|
|
9b8a5e9bf3 | ||
|
|
0f910f2d40 | ||
|
|
15f155100c | ||
|
|
2468f5a6c4 | ||
|
|
945a52a99f | ||
|
|
486b2c82a7 | ||
|
|
800b7f4370 | ||
|
|
8ca5a048d6 | ||
|
|
44b7a3c3f1 | ||
|
|
554ebe7206 | ||
|
|
d7b87fcb8e | ||
|
|
c94f9e1cc9 | ||
|
|
68532fade3 | ||
|
|
e219867cdf | ||
|
|
765d5d9729 | ||
|
|
43029f37b1 | ||
|
|
7188462c55 | ||
|
|
f9ff814955 | ||
|
|
dfbd1305b3 | ||
|
|
c9255ab31b | ||
|
|
1e714af3cf | ||
|
|
4c959cd983 | ||
|
|
d959c35723 | ||
|
|
69a9d7485b | ||
|
|
dcf07ad8c7 | ||
|
|
ed6cdb2eb4 | ||
|
|
a73e7e9f99 | ||
|
|
ab853e1fcf | ||
|
|
37d38b62b1 | ||
|
|
f9bb517142 | ||
|
|
efe9b867d5 | ||
|
|
d9cf33d1ba | ||
|
|
ee3028e67d | ||
|
|
d810e6c82d | ||
|
|
e0a281583d | ||
|
|
d739dcac2b | ||
|
|
cdd4cb8ec2 | ||
|
|
93ef90cd24 | ||
|
|
e165a1e65c | ||
|
|
4066e5bf14 | ||
|
|
4729514a22 | ||
|
|
93aedcfeb7 | ||
|
|
47d18bb896 | ||
|
|
61dafbe06e | ||
|
|
474325da68 | ||
|
|
9317401d57 | ||
|
|
67d746a62c | ||
|
|
2f1f68f12f | ||
|
|
2742edd73f | ||
|
|
834561a5de | ||
|
|
11102b4dd6 | ||
|
|
fef2da3c0b | ||
|
|
9820296e92 | ||
|
|
dbfde74c1e | ||
|
|
b28668e18d | ||
|
|
5f1174de27 | ||
|
|
543ce937ec | ||
|
|
5537b083a8 | ||
|
|
6b0854749f | ||
|
|
09ba4772b8 | ||
|
|
06a1d08465 | ||
|
|
d510ead877 | ||
|
|
2968a1559e | ||
|
|
cba26eedb5 | ||
|
|
23e74b2781 | ||
|
|
ef0277d10e | ||
|
|
a623a5b7cc | ||
|
|
be8479fdba | ||
|
|
e97e6d467c | ||
|
|
75ec890d46 | ||
|
|
871a9c29c8 | ||
|
|
a4f903d947 | ||
|
|
1920a52829 | ||
|
|
6e14a727b1 | ||
|
|
ea855837df | ||
|
|
d05ed0e59c | ||
|
|
a9eb443072 | ||
|
|
d382b00efd | ||
|
|
ef9d077c7f | ||
|
|
e4b20abf8e | ||
|
|
e9f0a10175 | ||
|
|
c3968a26cf | ||
|
|
9371515ecc | ||
|
|
a83e055b19 | ||
|
|
6907651756 | ||
|
|
fc2d0246e6 | ||
|
|
bb9c362bab | ||
|
|
51402e68d2 | ||
|
|
1b8813228b | ||
|
|
922e36cfb0 | ||
|
|
edff094626 | ||
|
|
aa72a080b0 | ||
|
|
2a93d1c652 | ||
|
|
6b2f23712c | ||
|
|
375ab93ee3 | ||
|
|
d5962e9d71 | ||
|
|
ffaa264bd3 | ||
|
|
ba7cb47383 | ||
|
|
48d417f9af | ||
|
|
df4db6bf6b | ||
|
|
b8ef491bc7 | ||
|
|
ea1ebb8d00 | ||
|
|
91b6d2852a | ||
|
|
d7cd1b37f8 | ||
|
|
160ff7bb07 | ||
|
|
31142180cb | ||
|
|
38b0fa04a8 | ||
|
|
29817245ba | ||
|
|
925fe6f152 | ||
|
|
93fd574b75 | ||
|
|
0de88bcbb9 | ||
|
|
0b70bd2b60 | ||
|
|
84ecba4629 | ||
|
|
f7142e69b6 | ||
|
|
ed7e560849 | ||
|
|
47e50e8511 | ||
|
|
72f6770d61 | ||
|
|
7da35e5468 | ||
|
|
7768274b2f | ||
|
|
33f006655d | ||
|
|
612b51d48f | ||
|
|
8101f3f67d | ||
|
|
e3c8d723e3 | ||
|
|
4579825758 | ||
|
|
ef91c33f55 | ||
|
|
511d5993df | ||
|
|
9f4958e869 | ||
|
|
c07775f5e3 | ||
|
|
e261579e72 | ||
|
|
cf54cad3ce | ||
|
|
a0998009c1 | ||
|
|
d6fdbfe9b7 | ||
|
|
07228279a3 | ||
|
|
6877ef790f | ||
|
|
a3809648dd | ||
|
|
df15606b00 | ||
|
|
4dc0d13688 | ||
|
|
541fa5cb1f | ||
|
|
ab9442d4ae | ||
|
|
f5c099e9a7 | ||
|
|
9582379e1b | ||
|
|
db9a4b31f9 | ||
|
|
409cb06ea0 | ||
|
|
88d917b662 | ||
|
|
faf077b494 | ||
|
|
ee1f45aa91 | ||
|
|
915fd3020b | ||
|
|
642788abec | ||
|
|
3cd11dd9a0 | ||
|
|
bf2c5ce368 | ||
|
|
65c510a211 | ||
|
|
6fbc38d764 | ||
|
|
200bf993d8 | ||
|
|
38af82e152 | ||
|
|
fc05f377fb | ||
|
|
5c0e86383c | ||
|
|
64f5ff5475 | ||
|
|
758777111a | ||
|
|
b90e0430f8 | ||
|
|
0ce7da1bf6 | ||
|
|
e6464c5c7f | ||
|
|
c6b3f06b95 | ||
|
|
581419b6a3 | ||
|
|
696ab677be | ||
|
|
0d229dac3b | ||
|
|
3b8ea599f0 | ||
|
|
3e70a61e33 | ||
|
|
76f35d02b7 | ||
|
|
356b417a04 | ||
|
|
56147a80b5 | ||
|
|
91728991d7 | ||
|
|
0f7e59d288 | ||
|
|
f33028c645 | ||
|
|
f9149ad433 | ||
|
|
0d7474cc88 | ||
|
|
1e7e06d1cc | ||
|
|
8453282fa6 | ||
|
|
40f971d18a | ||
|
|
ce7cb1eeae | ||
|
|
d2701616da | ||
|
|
10eb159e1b | ||
|
|
36897ceb19 | ||
|
|
9a8274130b | ||
|
|
c8d050c3e3 | ||
|
|
a46cd63c9d | ||
|
|
e9e6eaf079 | ||
|
|
cb5897af93 | ||
|
|
d701d6eb82 | ||
|
|
470ebb54e2 | ||
|
|
632cab398e | ||
|
|
189c4cc9d8 | ||
|
|
70d5e2dee8 | ||
|
|
c586106e51 | ||
|
|
ffa85a616a | ||
|
|
e5ea3e4a43 | ||
|
|
0492e63862 | ||
|
|
9952387356 | ||
|
|
d7653e6e42 | ||
|
|
e9fc40d285 | ||
|
|
740559e3bc | ||
|
|
9471577b3b | ||
|
|
e85d5e54e2 | ||
|
|
5fb071d80b | ||
|
|
022151fefd | ||
|
|
3b8d2fe8b7 | ||
|
|
d51d549a28 | ||
|
|
b5ac24f239 | ||
|
|
3ca99005f8 | ||
|
|
0b9f2921d2 | ||
|
|
389501ad0c | ||
|
|
082e4eb05c | ||
|
|
47f885a566 | ||
|
|
bc964b8588 | ||
|
|
b57b3313e4 | ||
|
|
f185cefa11 | ||
|
|
9d256e02d7 | ||
|
|
086c64c0be | ||
|
|
798fe57025 | ||
|
|
a03f744648 | ||
|
|
64f35744c4 | ||
|
|
b512528148 | ||
|
|
fdfa037dca | ||
|
|
db4ef1443d | ||
|
|
810468c279 | ||
|
|
8146d0830d | ||
|
|
7e946b040c | ||
|
|
97d24a7d4d | ||
|
|
f8bea66313 | ||
|
|
dd9129017f | ||
|
|
cbe3602cb7 | ||
|
|
1d831d65f3 | ||
|
|
c35d020731 | ||
|
|
c18db555a4 | ||
|
|
373092af16 | ||
|
|
1a2e157cda | ||
|
|
b3bc1a3907 | ||
|
|
4dd8d75cc0 | ||
|
|
e5f50bb7e0 | ||
|
|
45d5b4bea6 | ||
|
|
ed58cf953a | ||
|
|
ec26bc5ab7 | ||
|
|
84e4bd3d41 | ||
|
|
0ecfb63cd6 | ||
|
|
ebdd6ec40c | ||
|
|
0586760347 | ||
|
|
d535f244ad | ||
|
|
613d46824d | ||
|
|
041355f182 | ||
|
|
6977dc082f | ||
|
|
d3dffe8165 | ||
|
|
6812f9d202 | ||
|
|
555e7cc907 | ||
|
|
6180558068 | ||
|
|
cf589f8c64 | ||
|
|
e864919c0b | ||
|
|
c72d83b637 | ||
|
|
f2d2f28e23 | ||
|
|
a7435dad6d | ||
|
|
793f0b605c | ||
|
|
5b56ca7ffc | ||
|
|
5c988510b3 | ||
|
|
290624844b | ||
|
|
497efc9f5e | ||
|
|
19d76b635c | ||
|
|
4875def31c | ||
|
|
155c0e3609 | ||
|
|
00ea15dc19 | ||
|
|
f04c4cb78a | ||
|
|
6e4777692e | ||
|
|
4638fdf2d7 | ||
|
|
0783d385d5 | ||
|
|
cf918e7df8 | ||
|
|
1ba9faf35b | ||
|
|
6e48294f2a | ||
|
|
dea607b148 | ||
|
|
e938e717b0 | ||
|
|
2eed09ef1b | ||
|
|
8a6b3644be | ||
|
|
1d89fe503b | ||
|
|
788db036fd | ||
|
|
c38c473e11 | ||
|
|
aef1f8f701 | ||
|
|
83f9767254 | ||
|
|
3e0352eee6 | ||
|
|
28faff6425 | ||
|
|
d0112f989c | ||
|
|
9c4c310f46 | ||
|
|
7bf7bfb9c6 | ||
|
|
fbe776db0b | ||
|
|
1e2de1bb14 | ||
|
|
e395c9442f | ||
|
|
30286f0ea5 | ||
|
|
60ee742855 | ||
|
|
a913ede48f | ||
|
|
9592583783 | ||
|
|
ad49d3ad26 | ||
|
|
21ee73c2a3 | ||
|
|
f5d0cc9f32 | ||
|
|
b90c65370e | ||
|
|
88920e0546 | ||
|
|
d27773de03 | ||
|
|
8abdaeb044 | ||
|
|
9682d2f84a | ||
|
|
a86b9e81e9 | ||
|
|
a8bb7c68a3 | ||
|
|
bdad29adab | ||
|
|
fadcfe5f7a | ||
|
|
fbd83b5ff3 | ||
|
|
c351174fa4 | ||
|
|
cc4f99fe28 | ||
|
|
b2a9b88fe5 | ||
|
|
da06e0ec76 | ||
|
|
851ee81486 | ||
|
|
0dc9f5c324 | ||
|
|
36513c2301 | ||
|
|
3a10597aed | ||
|
|
2291be5d26 | ||
|
|
345c3ef15e | ||
|
|
c1dad11cb3 | ||
|
|
12b219e7b2 | ||
|
|
f8b48cf18d | ||
|
|
12a9792c7d | ||
|
|
ba55e2bc32 | ||
|
|
c5e5b70e08 | ||
|
|
327b186240 | ||
|
|
5c1417e276 | ||
|
|
0a2c99f1dc | ||
|
|
836bfbdd02 | ||
|
|
b13a35057a | ||
|
|
c3e77b1ec1 | ||
|
|
fb60bea659 | ||
|
|
b2ddba4cbf | ||
|
|
053251d566 | ||
|
|
cf161a5dd9 | ||
|
|
e4bcdbd0c4 | ||
|
|
cae43b26f4 | ||
|
|
b95cf9b9a3 | ||
|
|
e6f443cb24 | ||
|
|
087ccd69c9 | ||
|
|
7532477a2f | ||
|
|
433ae89e53 | ||
|
|
de853a2651 | ||
|
|
47c3045980 | ||
|
|
dd50c19ba3 | ||
|
|
707d7b3342 | ||
|
|
ba1a2fbce4 | ||
|
|
84f1e78660 | ||
|
|
3490ba0a56 | ||
|
|
1449486958 | ||
|
|
9094cf7ce3 | ||
|
|
df0a5b59f8 | ||
|
|
0827044caf | ||
|
|
342ae7c8cd | ||
|
|
fc690b9f02 | ||
|
|
22c9d836e0 | ||
|
|
984997e73b | ||
|
|
b39f407596 | ||
|
|
615ad0cc5a | ||
|
|
0b41cd8564 | ||
|
|
7db523071d | ||
|
|
974ee58b9c | ||
|
|
1e88f2c382 | ||
|
|
0bdcfcaaf5 | ||
|
|
5f9c78d04f | ||
|
|
afa178fdec | ||
|
|
3a0e3c98f7 | ||
|
|
fafa92d44b | ||
|
|
fcedd06e72 | ||
|
|
6a2acbe929 | ||
|
|
4cfff40475 | ||
|
|
904948dc7d | ||
|
|
7342509b2e | ||
|
|
ed837ba26f | ||
|
|
13262fdb18 | ||
|
|
baf18a8762 | ||
|
|
c0b56b927f | ||
|
|
242e64d72f | ||
|
|
2262af728e | ||
|
|
ea9947081f | ||
|
|
e04f943980 | ||
|
|
b38e940088 | ||
|
|
bc0bb92f7a | ||
|
|
8737be2623 | ||
|
|
eb929160b3 | ||
|
|
b8b0f257db | ||
|
|
67b5f39df2 | ||
|
|
7e9b3f1a60 | ||
|
|
bce777d7c6 | ||
|
|
465aaeff82 | ||
|
|
40c64d50d5 | ||
|
|
15bd2da824 | ||
|
|
bd438ca288 | ||
|
|
e0d02a61a9 | ||
|
|
b3328a0ec2 | ||
|
|
3c2041933f | ||
|
|
e88b1cc443 | ||
|
|
71b05b18a0 | ||
|
|
b07b528e2a | ||
|
|
1aeb6315ff | ||
|
|
1b4a3d2d9f | ||
|
|
3049a81c3b | ||
|
|
2db1e5cb74 | ||
|
|
78c64d39ec | ||
|
|
46ba726232 | ||
|
|
eb26e62889 | ||
|
|
7f667fed18 | ||
|
|
b2cb2b8b75 | ||
|
|
d19f65ce4a | ||
|
|
025b060506 | ||
|
|
7fa2625a03 | ||
|
|
33d62d7f21 | ||
|
|
b336655a79 | ||
|
|
3beffd84d6 | ||
|
|
02761f5f35 | ||
|
|
3b9f7885e0 | ||
|
|
7668e45890 | ||
|
|
695c8bc5d0 | ||
|
|
06c42d05c3 | ||
|
|
404104208f | ||
|
|
b4d0ad9713 | ||
|
|
89b1fa341b | ||
|
|
3bda7cb26b | ||
|
|
4f4f54a059 | ||
|
|
12fda29280 | ||
|
|
af060b3132 | ||
|
|
8c500709e4 | ||
|
|
490e6a6f23 | ||
|
|
08177c3dd8 | ||
|
|
d22b9c26b6 | ||
|
|
85a350b6c8 | ||
|
|
eae4eff92f | ||
|
|
848be8f806 | ||
|
|
4bb8ad19cf | ||
|
|
c79b79b37e | ||
|
|
8a03c366b8 | ||
|
|
37677f389c | ||
|
|
3e275b7dba | ||
|
|
11b7076a43 | ||
|
|
291c718ba2 | ||
|
|
fcd6071c57 | ||
|
|
476b61c4c9 | ||
|
|
8cc5f096a2 | ||
|
|
474d65207e | ||
|
|
03428329ef | ||
|
|
2692234b8c | ||
|
|
bfb5d7e5ac | ||
|
|
8c818e707f | ||
|
|
3efea47ca8 | ||
|
|
8d21988656 | ||
|
|
89da45f9ac | ||
|
|
34a0a00e3c | ||
|
|
dec1094a59 | ||
|
|
02e323133d | ||
|
|
cb96b536a2 | ||
|
|
627b40799c | ||
|
|
73c4b21285 | ||
|
|
78d7c45be3 | ||
|
|
72edbfc455 | ||
|
|
276535dad6 | ||
|
|
e373e59661 | ||
|
|
ac5ecf222e | ||
|
|
a20594ed48 | ||
|
|
cb59cc92a3 | ||
|
|
34bb18448c | ||
|
|
01253f050a | ||
|
|
cc7e47bbb6 | ||
|
|
5bee1c56a9 | ||
|
|
474cc7d56d | ||
|
|
bffdedddb4 | ||
|
|
fd72f658c0 | ||
|
|
42606162b2 | ||
|
|
e82bc1b7bc | ||
|
|
4f0e1c6c61 | ||
|
|
550f6aff7e | ||
|
|
67c50d7504 | ||
|
|
94f0c61619 | ||
|
|
8a86b30fd1 | ||
|
|
d3b5cf82d8 | ||
|
|
d26d804cc2 | ||
|
|
4f9a25ee89 | ||
|
|
6379108a75 | ||
|
|
bb9ce0e897 | ||
|
|
fbeaad077f | ||
|
|
8918113a31 | ||
|
|
c5385b5b4c | ||
|
|
35475e1d25 | ||
|
|
fb2c292f35 | ||
|
|
afc3fb10c7 | ||
|
|
0a239c2fef | ||
|
|
f5342a09d3 | ||
|
|
f72de687c5 | ||
|
|
d6fb9868bf | ||
|
|
9aff1a57d3 | ||
|
|
7681fde4d0 | ||
|
|
d3b7b41927 | ||
|
|
833269fd0a | ||
|
|
332c1a6c59 | ||
|
|
0f1f43057e | ||
|
|
784a7a7f24 | ||
|
|
8e34baa59f | ||
|
|
2926772bba | ||
|
|
da159e4655 | ||
|
|
a7f4496db7 | ||
|
|
f972f02fff | ||
|
|
1c77e26c05 | ||
|
|
59c5363933 | ||
|
|
b744bb0a5a | ||
|
|
0f140b408c | ||
|
|
7f6a6016d6 | ||
|
|
44ed0a3279 | ||
|
|
9964e1bb8e | ||
|
|
8b8f725499 | ||
|
|
bab856bce2 | ||
|
|
711799b194 | ||
|
|
3d285b91c6 | ||
|
|
1dc531930d | ||
|
|
3d3345acac | ||
|
|
2105cacce3 | ||
|
|
9d1d1710eb | ||
|
|
c69dcf3e20 | ||
|
|
eec5b37da1 | ||
|
|
b29f0ca4d1 | ||
|
|
576efbdc1b | ||
|
|
a7f0510a3e | ||
|
|
2ef088cb60 | ||
|
|
7c320b6fc4 | ||
|
|
e1bda4ee8b | ||
|
|
5a4c82b860 | ||
|
|
9b297b752e | ||
|
|
1d6ba58ccd | ||
|
|
1542447822 | ||
|
|
a6f0aff659 | ||
|
|
54930024f5 | ||
|
|
c5f2f63458 | ||
|
|
b2b81a5d0f | ||
|
|
265dca3723 | ||
|
|
171ddab32b | ||
|
|
2aee0b0be0 | ||
|
|
817cdf7113 | ||
|
|
495e734428 | ||
|
|
82120cf47f | ||
|
|
027a5695f2 | ||
|
|
d6d82edff5 | ||
|
|
a12eb3fc6f | ||
|
|
6c84574366 | ||
|
|
1a38f25bd9 | ||
|
|
ad40e53349 | ||
|
|
a2ddf362d8 | ||
|
|
65eca31635 | ||
|
|
8b0b4a2c39 | ||
|
|
bc5cbe9fba | ||
|
|
f83f92d3fa | ||
|
|
c0216c0653 | ||
|
|
61de63a518 | ||
|
|
d952cc2327 | ||
|
|
19fd4dd89c | ||
|
|
f941f5c0b0 | ||
|
|
c7cad7e4aa | ||
|
|
1c8988d3f7 | ||
|
|
70a3dbe2b0 | ||
|
|
efbb3ab25f | ||
|
|
46447f7cfd | ||
|
|
a6e62e07a2 | ||
|
|
b1d25e0503 | ||
|
|
25c557248c | ||
|
|
b0e7c65504 | ||
|
|
b18b044b63 | ||
|
|
8f5f8db717 | ||
|
|
016e28383b | ||
|
|
f1427e9279 | ||
|
|
169e9ab5ad | ||
|
|
472cde29b8 | ||
|
|
73525d19e9 | ||
|
|
26618f8d73 | ||
|
|
6f7c13b814 | ||
|
|
e7d668502c | ||
|
|
6fd357962f | ||
|
|
0c9feedb37 | ||
|
|
dad52724db | ||
|
|
14ba002cbc | ||
|
|
d48e9d5d72 | ||
|
|
24e2c3a5e9 | ||
|
|
064523ef25 | ||
|
|
85f293a44e | ||
|
|
8e412bee5f | ||
|
|
7d5555f82e | ||
|
|
6720725d27 | ||
|
|
fe5c65d798 | ||
|
|
253f3cf1ba | ||
|
|
db2e48b49f | ||
|
|
5e089451af | ||
|
|
6aa22267f4 | ||
|
|
f76c020dd7 | ||
|
|
722fba7805 | ||
|
|
86551909fc | ||
|
|
588e94c11d | ||
|
|
9e66310c28 | ||
|
|
93c422dce6 | ||
|
|
7d6eebdae3 | ||
|
|
f11bb609c9 | ||
|
|
b910a92731 | ||
|
|
ee7d297ca8 | ||
|
|
a70c0174e1 | ||
|
|
da707afa3f | ||
|
|
a41597431c | ||
|
|
d0b817381e | ||
|
|
60a2e9b5dc | ||
|
|
df3a37b0a3 | ||
|
|
5f4718cd13 | ||
|
|
3cc5cb3123 | ||
|
|
8a2872afa4 | ||
|
|
85941c4729 | ||
|
|
82eeefb544 | ||
|
|
f6061ba00e | ||
|
|
9e3afcfe7a | ||
|
|
21f2f86cb8 | ||
|
|
04576ca828 | ||
|
|
067cb0cd9d | ||
|
|
17fb8f2298 | ||
|
|
fbfc4e72ca | ||
|
|
d2e171eabc | ||
|
|
e50094af80 | ||
|
|
93edf72993 | ||
|
|
a230d63cf9 | ||
|
|
2bb39bee2f | ||
|
|
ce2ca5446a | ||
|
|
8a014ff786 | ||
|
|
dc09ec7598 | ||
|
|
27fb0474d5 | ||
|
|
7f0a87742a | ||
|
|
47e236788c | ||
|
|
236ad57608 | ||
|
|
6d03798314 | ||
|
|
c954a4f7bc | ||
|
|
ba588d1097 | ||
|
|
44f7c9a545 | ||
|
|
b910db322b | ||
|
|
c44a942fb7 | ||
|
|
d713ad3499 | ||
|
|
ddf40df649 | ||
|
|
7c6d85221d | ||
|
|
b66b82a6e9 | ||
|
|
c44b85ea87 | ||
|
|
fcbf56e93a | ||
|
|
a539ffb188 | ||
|
|
512f533a80 | ||
|
|
96ef9cdbee | ||
|
|
28fcbbcf7b | ||
|
|
0f4326151f | ||
|
|
e0e27774ad | ||
|
|
1223b48b2c | ||
|
|
d8338f0b48 | ||
|
|
38019f7f42 | ||
|
|
23978ef4d2 | ||
|
|
3b4cb23112 | ||
|
|
974cb1167f | ||
|
|
6ccbc272c6 | ||
|
|
0eb28c3265 | ||
|
|
2daa131fb2 | ||
|
|
51247d36c5 | ||
|
|
37fa227fb5 | ||
|
|
9dd272b357 | ||
|
|
277298feae | ||
|
|
ff24bc0b68 | ||
|
|
700c51f95c | ||
|
|
659914afbe | ||
|
|
ee06aed94b | ||
|
|
af1f5d5ab2 | ||
|
|
4292ddd0ae | ||
|
|
4a68fd65b6 | ||
|
|
0e33632e79 | ||
|
|
a9b20dae33 | ||
|
|
e595937740 | ||
|
|
72eb584e65 | ||
|
|
8999a57f06 | ||
|
|
8024089bde | ||
|
|
5e01f785ae | ||
|
|
d35d1b8860 | ||
|
|
88027f2151 | ||
|
|
cd41e7108b | ||
|
|
6da566faff | ||
|
|
df7a866617 | ||
|
|
1cc8f13d54 | ||
|
|
086ce63c6c | ||
|
|
f1dcecc6cf | ||
|
|
fe1ce08a6c | ||
|
|
1d64ddb7f5 | ||
|
|
823b121cc7 | ||
|
|
149d35c687 | ||
|
|
3a18e68751 | ||
|
|
6afcc83955 | ||
|
|
277d8773f2 | ||
|
|
f161cf8b0a | ||
|
|
dc62ae95a6 | ||
|
|
f4ecc315d0 | ||
|
|
cb2a1e57fe | ||
|
|
1396faf433 | ||
|
|
dc8d2ae683 | ||
|
|
191c7c50b6 | ||
|
|
c6725b0518 | ||
|
|
4820a6e01c | ||
|
|
57a9b5bc0c | ||
|
|
8c224da5d5 | ||
|
|
14e49f3c80 | ||
|
|
cc8f1adca3 | ||
|
|
122e2f7a8e | ||
|
|
b4e1585e2b | ||
|
|
a5830599c4 |
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -17,3 +17,8 @@ tools/** binary
|
||||
*.apk binary
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.ttf binary
|
||||
|
||||
# Help GitHub detect languages
|
||||
native/jni/external/** linguist-vendored
|
||||
native/jni/systemproperties/** linguist-language=C++
|
||||
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -22,6 +22,9 @@
|
||||
[submodule "mincrypt"]
|
||||
path = native/jni/external/mincrypt
|
||||
url = https://github.com/topjohnwu/mincrypt.git
|
||||
[submodule "pcre"]
|
||||
path = native/jni/external/pcre
|
||||
url = https://android.googlesource.com/platform/external/pcre
|
||||
[submodule "termux-elf-cleaner"]
|
||||
path = tools/termux-elf-cleaner
|
||||
url = https://github.com/termux/termux-elf-cleaner.git
|
||||
|
||||
93
README.MD
93
README.MD
@@ -1,34 +1,70 @@
|
||||
# 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)
|
||||

|
||||

|
||||
|
||||
## 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.
|
||||
Magisk is a suite of open source tools for customizing Android, supporting devices higher than Android 4.2. It covers fundamental parts of 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).
|
||||
Here are some feature highlights:
|
||||
|
||||
- **MagiskSU**: Provide root access to your device
|
||||
- **Magisk Modules**: Modify read-only partitions by installing modules
|
||||
- **MagiskHide**: Hide Magisk from root detections / system integrity checks
|
||||
|
||||
## Downloads
|
||||
|
||||
[](https://github.com/topjohnwu/Magisk/releases/download/manager-v8.0.2/MagiskManager-v8.0.2.apk)
|
||||
[](https://raw.githubusercontent.com/topjohnwu/magisk_files/canary/app-debug.apk)
|
||||
<br>
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v20.4)
|
||||
[](https://github.com/topjohnwu/Magisk/releases/tag/v21.0)
|
||||
|
||||
## Useful Links
|
||||
|
||||
- [Installation Instruction](https://topjohnwu.github.io/Magisk/install.html)
|
||||
- [Frequently Asked Questions](https://topjohnwu.github.io/Magisk/faq.html)
|
||||
- [Magisk Documentation](https://topjohnwu.github.io/Magisk/)
|
||||
- [Magisk Troubleshoot Wiki](https://www.didgeridoohan.com/magisk/HomePage) (by [@Didgeridoohan](https://github.com/Didgeridoohan))
|
||||
|
||||
## Android Version Support
|
||||
|
||||
- Android 4.2+: MagiskSU and Magisk Modules Only
|
||||
- Android 4.4+: All core features available
|
||||
- Android 6.0+: Guaranteed MagiskHide support
|
||||
- Android 7.0+: Full MagiskHide protection
|
||||
- Android 9.0+: Magisk Manager stealth mode
|
||||
|
||||
## 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 are 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](https://github.com/topjohnwu/Magisk/issues) or directly in the thread.
|
||||
Canary Channels are cutting edge builds for those adventurous. To access canary builds, install the Canary Magisk Manager, switch to the Canary Channel in settings and upgrade.
|
||||
|
||||
## Building Environment Requirements
|
||||
**Only bug reports from Canary builds will be accepted.**
|
||||
|
||||
- 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
|
||||
For installation issues, upload both boot image and install logs.<br>
|
||||
For Magisk issues, upload boot logcat or dmesg.<br>
|
||||
For Magisk Manager crashes, record and upload the logcat when the crash occurs.
|
||||
|
||||
## Building Notes and Instructions
|
||||
## Building and Development
|
||||
|
||||
- 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).
|
||||
- Magisk builds on any OS Android Studio supports. Install Android Studio and do the initial setups.
|
||||
- Clone sources: `git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git`
|
||||
- Install Python 3.6+ \
|
||||
(Windows only: select **'Add Python to PATH'** in installer, and run `pip install colorama` after install)
|
||||
- Configure to use the JDK bundled in Android Studio:
|
||||
- macOS: `export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"`
|
||||
- Linux: `export PATH="/path/to/androidstudio/jre/bin:$PATH"`
|
||||
- Windows: Add `C:\Path\To\Android Studio\jre\bin` to environment variable `PATH`
|
||||
- Set environment variable `ANDROID_SDK_ROOT` to the Android SDK folder (can be found in Android Studio settings)
|
||||
- Run `./build.py ndk` to let the script download and install NDK for you
|
||||
- Set configurations in `config.prop`. A sample `config.prop.sample` is provided.
|
||||
- To start building, run `build.py` to see your options. \
|
||||
For each action, use `-h` to access help (e.g. `./build.py all -h`)
|
||||
- To start development, open the project in Android Studio. Both app (Kotlin/Java) and native (C++/C) source code can be properly developed using the IDE, but *always* use `build.py` for building.
|
||||
- `build.py` builds in debug mode by default. If you want release builds (with `-r, --release`), you need a Java Keystore to sign APKs and zips. For more information, check [Google's Documentation](https://developer.android.com/studio/publish/app-signing.html#generate-key).
|
||||
|
||||
## Translations
|
||||
## Translation Contributions
|
||||
|
||||
Default string resources for Magisk Manager and its stub APK are located here:
|
||||
|
||||
@@ -37,27 +73,6 @@ Default string resources for Magisk Manager and its stub APK are located here:
|
||||
|
||||
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:
|
||||
|
||||
134
app/build.gradle
134
app/build.gradle
@@ -1,134 +0,0 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
|
||||
kapt {
|
||||
correctErrorTypes = true
|
||||
useBuildCache = true
|
||||
mapDiagnosticLocations = true
|
||||
javacOptions {
|
||||
option("-Xmaxerrs", 1000)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
defaultConfig {
|
||||
applicationId 'com.topjohnwu.magisk'
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled true
|
||||
versionName props['appVersion']
|
||||
versionCode props['appVersionCode'] as Integer
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
|
||||
'proguard-rules.pro', 'proguard-kotlin.pro'
|
||||
}
|
||||
}
|
||||
|
||||
dataBinding {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude '/META-INF/*.version'
|
||||
exclude '/META-INF/*.kotlin_module'
|
||||
exclude '/META-INF/rxkotlin.properties'
|
||||
exclude '/androidsupportmultidexversion.txt'
|
||||
exclude '/org/bouncycastle/**'
|
||||
exclude '/kotlin/**'
|
||||
exclude '/kotlinx/**'
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '1.8'
|
||||
}
|
||||
}
|
||||
|
||||
androidExtensions {
|
||||
experimental = true
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation project(':shared')
|
||||
implementation project(':signing')
|
||||
|
||||
implementation 'com.github.topjohnwu:jtar:1.0.0'
|
||||
implementation 'com.jakewharton.timber:timber:4.7.1'
|
||||
implementation 'com.ncapdevi:frag-nav:3.2.0'
|
||||
implementation 'com.github.pwittchen:reactivenetwork-rx2:3.0.6'
|
||||
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.2.13'
|
||||
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:${vKotlin}"
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${vKotlin}"
|
||||
|
||||
def vBAdapt = '3.1.1'
|
||||
def bindingAdapter = 'me.tatarka.bindingcollectionadapter2:bindingcollectionadapter'
|
||||
implementation "${bindingAdapter}:${vBAdapt}"
|
||||
implementation "${bindingAdapter}-recyclerview:${vBAdapt}"
|
||||
|
||||
def vMarkwon = '4.1.2'
|
||||
implementation "io.noties.markwon:core:${vMarkwon}"
|
||||
implementation "io.noties.markwon:html:${vMarkwon}"
|
||||
implementation "io.noties.markwon:image:${vMarkwon}"
|
||||
implementation 'com.caverock:androidsvg:1.4'
|
||||
|
||||
def vLibsu = '2.5.1'
|
||||
implementation "com.github.topjohnwu.libsu:core:${vLibsu}"
|
||||
implementation "com.github.topjohnwu.libsu:io:${vLibsu}"
|
||||
|
||||
def vKoin = "2.0.1"
|
||||
implementation "org.koin:koin-core:${vKoin}"
|
||||
implementation "org.koin:koin-android:${vKoin}"
|
||||
implementation "org.koin:koin-androidx-viewmodel:${vKoin}"
|
||||
|
||||
def vRetrofit = '2.6.2'
|
||||
implementation "com.squareup.retrofit2:retrofit:${vRetrofit}"
|
||||
implementation "com.squareup.retrofit2:converter-moshi:${vRetrofit}"
|
||||
implementation "com.squareup.retrofit2:converter-scalars:${vRetrofit}"
|
||||
implementation "com.squareup.retrofit2:adapter-rxjava2:${vRetrofit}"
|
||||
|
||||
def vOkHttp = '3.12.6'
|
||||
implementation "com.squareup.okhttp3:okhttp:${vOkHttp}"
|
||||
implementation "com.squareup.okhttp3:logging-interceptor:${vOkHttp}"
|
||||
|
||||
def vMoshi = "1.8.0"
|
||||
implementation "com.squareup.moshi:moshi:${vMoshi}"
|
||||
|
||||
def vKotshi = "2.0.1"
|
||||
implementation "se.ansman.kotshi:api:${vKotshi}"
|
||||
kapt "se.ansman.kotshi:compiler:${vKotshi}"
|
||||
|
||||
modules {
|
||||
module('androidx.room:room-runtime') {
|
||||
replacedBy('com.github.topjohnwu:room-runtime')
|
||||
}
|
||||
}
|
||||
def vRoom = "2.2.1"
|
||||
implementation "com.github.topjohnwu:room-runtime:${vRoom}"
|
||||
kapt "androidx.room:room-compiler:${vRoom}"
|
||||
|
||||
def vNav = "2.1.0"
|
||||
implementation "androidx.navigation:navigation-fragment-ktx:$vNav"
|
||||
implementation "androidx.navigation:navigation-ui-ktx:$vNav"
|
||||
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha03'
|
||||
implementation 'androidx.preference:preference:1.1.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0-rc01'
|
||||
implementation 'androidx.fragment:fragment-ktx:1.2.0-rc01'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.work:work-runtime:2.2.0'
|
||||
implementation 'androidx.transition:transition:1.3.0-rc01'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.core:core-ktx:1.1.0'
|
||||
implementation 'com.google.android.material:material:1.2.0-alpha01'
|
||||
}
|
||||
149
app/build.gradle.kts
Normal file
149
app/build.gradle.kts
Normal file
@@ -0,0 +1,149 @@
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
kotlin("android")
|
||||
kotlin("android.extensions")
|
||||
kotlin("kapt")
|
||||
id("androidx.navigation.safeargs.kotlin")
|
||||
}
|
||||
|
||||
kapt {
|
||||
correctErrorTypes = true
|
||||
useBuildCache = true
|
||||
mapDiagnosticLocations = true
|
||||
javacOptions {
|
||||
option("-Xmaxerrs", 1000)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
defaultConfig {
|
||||
applicationId = "com.topjohnwu.magisk"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled = true
|
||||
versionName = Config["appVersion"]
|
||||
versionCode = Config["appVersionCode"]?.toInt()
|
||||
buildConfigField("int", "LATEST_MAGISK", Config["versionCode"] ?: "Integer.MAX_VALUE")
|
||||
|
||||
javaCompileOptions.annotationProcessorOptions.arguments(
|
||||
mapOf("room.incremental" to "true")
|
||||
)
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
isMinifyEnabled = true
|
||||
isShrinkResources = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
dataBinding = true
|
||||
}
|
||||
|
||||
dependenciesInfo {
|
||||
includeInApk = false
|
||||
includeInBundle = false
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude("/META-INF/**")
|
||||
exclude("/org/bouncycastle/**")
|
||||
exclude("/kotlin/**")
|
||||
exclude("/kotlinx/**")
|
||||
exclude("/okhttp3/**")
|
||||
exclude("/*.txt")
|
||||
exclude("/*.bin")
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
||||
|
||||
androidExtensions {
|
||||
isExperimental = true
|
||||
}
|
||||
|
||||
val copyUtils = tasks.register("copyUtils", Copy::class) {
|
||||
from(rootProject.file("scripts/util_functions.sh"))
|
||||
into("src/main/res/raw")
|
||||
}
|
||||
|
||||
tasks["preBuild"]?.dependsOn(copyUtils)
|
||||
|
||||
dependencies {
|
||||
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
|
||||
implementation(kotlin("stdlib"))
|
||||
implementation(project(":app:shared"))
|
||||
implementation(project(":app:signing"))
|
||||
|
||||
implementation("com.github.topjohnwu:jtar:1.0.0")
|
||||
implementation("com.github.topjohnwu:indeterminate-checkbox:1.0.7")
|
||||
implementation("com.github.topjohnwu:lz4-java:1.7.1")
|
||||
implementation("com.jakewharton.timber:timber:4.7.1")
|
||||
|
||||
val vBAdapt = "4.0.0"
|
||||
val bindingAdapter = "me.tatarka.bindingcollectionadapter2:bindingcollectionadapter"
|
||||
implementation("${bindingAdapter}:${vBAdapt}")
|
||||
implementation("${bindingAdapter}-recyclerview:${vBAdapt}")
|
||||
|
||||
val vMarkwon = "4.6.0"
|
||||
implementation("io.noties.markwon:core:${vMarkwon}")
|
||||
implementation("io.noties.markwon:html:${vMarkwon}")
|
||||
implementation("io.noties.markwon:image:${vMarkwon}")
|
||||
implementation("com.caverock:androidsvg:1.4")
|
||||
|
||||
val vLibsu = "3.0.2"
|
||||
implementation("com.github.topjohnwu.libsu:core:${vLibsu}")
|
||||
implementation("com.github.topjohnwu.libsu:io:${vLibsu}")
|
||||
|
||||
val vKoin = "2.1.6"
|
||||
implementation("org.koin:koin-core:${vKoin}")
|
||||
implementation("org.koin:koin-android:${vKoin}")
|
||||
implementation("org.koin:koin-androidx-viewmodel:${vKoin}")
|
||||
|
||||
val vRetrofit = "2.9.0"
|
||||
implementation("com.squareup.retrofit2:retrofit:${vRetrofit}")
|
||||
implementation("com.squareup.retrofit2:converter-moshi:${vRetrofit}")
|
||||
implementation("com.squareup.retrofit2:converter-scalars:${vRetrofit}")
|
||||
|
||||
val vOkHttp = "3.12.12"
|
||||
implementation("com.squareup.okhttp3:okhttp") {
|
||||
version {
|
||||
strictly(vOkHttp)
|
||||
}
|
||||
}
|
||||
implementation("com.squareup.okhttp3:logging-interceptor:${vOkHttp}")
|
||||
implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:${vOkHttp}")
|
||||
|
||||
val vMoshi = "1.11.0"
|
||||
implementation("com.squareup.moshi:moshi:${vMoshi}")
|
||||
kapt("com.squareup.moshi:moshi-kotlin-codegen:${vMoshi}")
|
||||
|
||||
val vRoom = "2.3.0-alpha03"
|
||||
implementation("androidx.room:room-runtime:${vRoom}")
|
||||
implementation("androidx.room:room-ktx:${vRoom}")
|
||||
kapt("androidx.room:room-compiler:${vRoom}")
|
||||
|
||||
val vNav: String by rootProject.extra
|
||||
implementation("androidx.navigation:navigation-fragment-ktx:${vNav}")
|
||||
implementation("androidx.navigation:navigation-ui-ktx:${vNav}")
|
||||
|
||||
implementation("androidx.biometric:biometric:1.0.1")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.0.4")
|
||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||
implementation("androidx.browser:browser:1.2.0")
|
||||
implementation("androidx.preference:preference:1.1.1")
|
||||
implementation("androidx.recyclerview:recyclerview:1.1.0")
|
||||
implementation("androidx.fragment:fragment-ktx:1.2.5")
|
||||
implementation("androidx.work:work-runtime-ktx:2.4.0")
|
||||
implementation("androidx.transition:transition:1.3.1")
|
||||
implementation("androidx.multidex:multidex:2.0.1")
|
||||
implementation("androidx.core:core-ktx:1.3.2")
|
||||
implementation("androidx.localbroadcastmanager:localbroadcastmanager:1.0.0")
|
||||
implementation("com.google.android.material:material:1.2.1")
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
## So every class is case insensitive to avoid some bizare problems
|
||||
-dontusemixedcaseclassnames
|
||||
|
||||
## If reflection issues come up uncomment this, that should temporarily fix it
|
||||
#-keep class kotlin.** { *; }
|
||||
#-keep class kotlin.Metadata { *; }
|
||||
#-keepclassmembers class kotlin.Metadata {
|
||||
# public <methods>;
|
||||
#}
|
||||
|
||||
## Never warn about Kotlin, it should work as-is
|
||||
-dontwarn kotlin.**
|
||||
|
||||
## Removes runtime null checks - doesn't really matter if it crashes on kotlin or java NPE
|
||||
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
|
||||
static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
|
||||
}
|
||||
|
||||
## Useless option for dex
|
||||
-dontpreverify
|
||||
42
app/proguard-rules.pro
vendored
42
app/proguard-rules.pro
vendored
@@ -16,33 +16,33 @@
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Kotlin
|
||||
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
|
||||
public static void checkExpressionValueIsNotNull(...);
|
||||
public static void checkNotNullExpressionValue(...);
|
||||
public static void checkReturnedValueIsNotNull(...);
|
||||
public static void checkFieldIsNotNull(...);
|
||||
public static void checkParameterIsNotNull(...);
|
||||
}
|
||||
|
||||
# Stubs
|
||||
-keep class a.* { *; }
|
||||
|
||||
# Snet
|
||||
-keepclassmembers class com.topjohnwu.magisk.utils.SafetyNetHelper { *; }
|
||||
-keep,allowobfuscation interface com.topjohnwu.magisk.utils.SafetyNetHelper$Callback
|
||||
-keepclassmembers class * implements com.topjohnwu.magisk.utils.SafetyNetHelper$Callback {
|
||||
void onResponse(int);
|
||||
-keepclassmembers class com.topjohnwu.magisk.ui.safetynet.SafetyNetHelper { *; }
|
||||
-keep,allowobfuscation interface com.topjohnwu.magisk.ui.safetynet.SafetyNetHelper$Callback
|
||||
-keepclassmembers class * implements com.topjohnwu.magisk.ui.safetynet.SafetyNetHelper$Callback {
|
||||
void onResponse(org.json.JSONObject);
|
||||
}
|
||||
|
||||
# Keep all fragment constructors
|
||||
-keepclassmembers class * extends androidx.fragment.app.Fragment {
|
||||
public <init>(...);
|
||||
# Strip Timber verbose and debug logging
|
||||
-assumenosideeffects class timber.log.Timber.Tree {
|
||||
public void v(**);
|
||||
public void d(**);
|
||||
}
|
||||
|
||||
# DelegateWorker
|
||||
-keep,allowobfuscation class * extends com.topjohnwu.magisk.base.DelegateWorker
|
||||
|
||||
# BootSigner
|
||||
-keep class a.a { *; }
|
||||
|
||||
# Workaround R8 bug
|
||||
-keep,allowobfuscation class com.topjohnwu.magisk.model.receiver.GeneralReceiver
|
||||
-keepclassmembers class a.e { *; }
|
||||
|
||||
# Strip logging
|
||||
-assumenosideeffects class timber.log.Timber.Tree { *; }
|
||||
|
||||
# Excessive obfuscation
|
||||
-repackageclasses 'a'
|
||||
-repackageclasses
|
||||
-allowaccessmodification
|
||||
|
||||
# QOL
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
com.topjohnwu.magisk:color/xxxxxxxx = 0x7f010000
|
||||
com.topjohnwu.magisk:drawable/xxxxxxxx = 0x7f020000
|
||||
com.topjohnwu.magisk:string/xxxxxxxx = 0x7f030000
|
||||
com.topjohnwu.magisk:style/xxxxxxxx = 0x7f040000
|
||||
com.topjohnwu.magisk:xml/xxxxxxxx = 0x7f050000
|
||||
14
app/shared/build.gradle.kts
Normal file
14
app/shared/build.gradle.kts
Normal file
@@ -0,0 +1,14 @@
|
||||
plugins {
|
||||
id("com.android.library")
|
||||
}
|
||||
|
||||
android {
|
||||
defaultConfig {
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
consumerProguardFiles("proguard-rules.pro")
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
|
||||
}
|
||||
17
app/shared/src/main/AndroidManifest.xml
Normal file
17
app/shared/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.topjohnwu.shared">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
|
||||
<application
|
||||
android:label="Magisk Manager"
|
||||
android:installLocation="internalOnly"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||
tools:ignore="UnusedAttribute">
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -11,11 +11,9 @@ import static android.os.Build.VERSION.SDK_INT;
|
||||
|
||||
public class DynAPK {
|
||||
|
||||
private static final int STUB_VERSION = 3;
|
||||
|
||||
// Indices of the object array
|
||||
private static final int STUB_VERSION_ENTRY = 0;
|
||||
private static final int COMPONENT_MAP = 1;
|
||||
private static final int CLASS_COMPONENT_MAP = 1;
|
||||
|
||||
private static File dynDir;
|
||||
private static Method addAssetPath;
|
||||
@@ -44,14 +42,14 @@ public class DynAPK {
|
||||
Object[] arr = (Object[]) o;
|
||||
Data data = new Data();
|
||||
data.version = (int) arr[STUB_VERSION_ENTRY];
|
||||
data.componentMap = (Map<String, String>) arr[COMPONENT_MAP];
|
||||
data.classToComponent = (Map<String, String>) arr[CLASS_COMPONENT_MAP];
|
||||
return data;
|
||||
}
|
||||
|
||||
public static Object pack(Data data) {
|
||||
Object[] arr = new Object[2];
|
||||
arr[STUB_VERSION_ENTRY] = data.version;
|
||||
arr[COMPONENT_MAP] = data.componentMap;
|
||||
arr[CLASS_COMPONENT_MAP] = data.classToComponent;
|
||||
return arr;
|
||||
}
|
||||
|
||||
@@ -64,7 +62,7 @@ public class DynAPK {
|
||||
}
|
||||
|
||||
public static class Data {
|
||||
public int version = STUB_VERSION;
|
||||
public Map<String, String> componentMap;
|
||||
public int version;
|
||||
public Map<String, String> classToComponent;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,7 @@ package com.topjohnwu.magisk;
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ProviderInfo;
|
||||
import android.content.res.XmlResourceParser;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.net.Uri;
|
||||
@@ -16,17 +14,12 @@ import android.provider.OpenableColumns;
|
||||
import android.text.TextUtils;
|
||||
import android.webkit.MimeTypeMap;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
|
||||
import static org.xmlpull.v1.XmlPullParser.START_TAG;
|
||||
|
||||
/**
|
||||
* Modified from androidx.core.content.FileProvider
|
||||
*/
|
||||
@@ -34,33 +27,17 @@ public class FileProvider extends ContentProvider {
|
||||
private static final String[] COLUMNS = {
|
||||
OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE };
|
||||
|
||||
private static final String
|
||||
META_DATA_FILE_PROVIDER_PATHS = "android.support.FILE_PROVIDER_PATHS";
|
||||
|
||||
private static final String TAG_ROOT_PATH = "root-path";
|
||||
private static final String TAG_FILES_PATH = "files-path";
|
||||
private static final String TAG_CACHE_PATH = "cache-path";
|
||||
private static final String TAG_EXTERNAL = "external-path";
|
||||
private static final String TAG_EXTERNAL_FILES = "external-files-path";
|
||||
private static final String TAG_EXTERNAL_CACHE = "external-cache-path";
|
||||
private static final String TAG_EXTERNAL_MEDIA = "external-media-path";
|
||||
|
||||
private static final String ATTR_NAME = "name";
|
||||
private static final String ATTR_PATH = "path";
|
||||
|
||||
private static final File DEVICE_ROOT = new File("/");
|
||||
|
||||
private static HashMap<String, PathStrategy> sCache = new HashMap<>();
|
||||
|
||||
private PathStrategy mStrategy;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void attachInfo(Context context, ProviderInfo info) {
|
||||
super.attachInfo(context, info);
|
||||
@@ -83,7 +60,6 @@ public class FileProvider extends ContentProvider {
|
||||
return strategy.getUriForFile(file);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection,
|
||||
String[] selectionArgs,
|
||||
@@ -116,7 +92,6 @@ public class FileProvider extends ContentProvider {
|
||||
return cursor;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getType(Uri uri) {
|
||||
|
||||
@@ -134,20 +109,17 @@ public class FileProvider extends ContentProvider {
|
||||
return "application/octet-stream";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Uri insert(Uri uri, ContentValues values) {
|
||||
throw new UnsupportedOperationException("No external inserts");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int update(Uri uri, ContentValues values, String selection,
|
||||
String[] selectionArgs) {
|
||||
throw new UnsupportedOperationException("No external updates");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int delete(Uri uri, String selection,
|
||||
String[] selectionArgs) {
|
||||
@@ -156,7 +128,6 @@ public class FileProvider extends ContentProvider {
|
||||
return file.delete() ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ParcelFileDescriptor openFile(Uri uri, String mode)
|
||||
throws FileNotFoundException {
|
||||
@@ -166,95 +137,54 @@ public class FileProvider extends ContentProvider {
|
||||
return ParcelFileDescriptor.open(file, fileMode);
|
||||
}
|
||||
|
||||
|
||||
private static PathStrategy getPathStrategy(Context context, String authority) {
|
||||
PathStrategy strat;
|
||||
synchronized (sCache) {
|
||||
strat = sCache.get(authority);
|
||||
if (strat == null) {
|
||||
try {
|
||||
strat = parsePathStrategy(context, authority);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(
|
||||
"Failed to parse " + META_DATA_FILE_PROVIDER_PATHS + " meta-data", e);
|
||||
} catch (XmlPullParserException e) {
|
||||
throw new IllegalArgumentException(
|
||||
"Failed to parse " + META_DATA_FILE_PROVIDER_PATHS + " meta-data", e);
|
||||
}
|
||||
strat = createPathStrategy(context, authority);
|
||||
sCache.put(authority, strat);
|
||||
}
|
||||
}
|
||||
return strat;
|
||||
}
|
||||
|
||||
|
||||
private static PathStrategy parsePathStrategy(Context context, String authority)
|
||||
throws IOException, XmlPullParserException {
|
||||
private static PathStrategy createPathStrategy(Context context, String authority) {
|
||||
final SimplePathStrategy strat = new SimplePathStrategy(authority);
|
||||
|
||||
final ProviderInfo info = context.getPackageManager()
|
||||
.resolveContentProvider(authority, PackageManager.GET_META_DATA);
|
||||
final XmlResourceParser in = info.loadXmlMetaData(
|
||||
context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
|
||||
if (in == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data");
|
||||
strat.addRoot("root_files", buildPath(DEVICE_ROOT, "."));
|
||||
strat.addRoot("internal_files", buildPath(context.getFilesDir(), "."));
|
||||
strat.addRoot("cache_files", buildPath(context.getCacheDir(), "."));
|
||||
strat.addRoot("external_files", buildPath(Environment.getExternalStorageDirectory(), "."));
|
||||
{
|
||||
File[] externalFilesDirs = getExternalFilesDirs(context, null);
|
||||
if (externalFilesDirs.length > 0) {
|
||||
strat.addRoot("external_file_files", buildPath(externalFilesDirs[0], "."));
|
||||
}
|
||||
}
|
||||
|
||||
int type;
|
||||
while ((type = in.next()) != END_DOCUMENT) {
|
||||
if (type == START_TAG) {
|
||||
final String tag = in.getName();
|
||||
|
||||
final String name = in.getAttributeValue(null, ATTR_NAME);
|
||||
String path = in.getAttributeValue(null, ATTR_PATH);
|
||||
|
||||
File target = null;
|
||||
if (TAG_ROOT_PATH.equals(tag)) {
|
||||
target = DEVICE_ROOT;
|
||||
} else if (TAG_FILES_PATH.equals(tag)) {
|
||||
target = context.getFilesDir();
|
||||
} else if (TAG_CACHE_PATH.equals(tag)) {
|
||||
target = context.getCacheDir();
|
||||
} else if (TAG_EXTERNAL.equals(tag)) {
|
||||
target = Environment.getExternalStorageDirectory();
|
||||
} else if (TAG_EXTERNAL_FILES.equals(tag)) {
|
||||
File[] externalFilesDirs = getExternalFilesDirs(context, null);
|
||||
if (externalFilesDirs.length > 0) {
|
||||
target = externalFilesDirs[0];
|
||||
}
|
||||
} else if (TAG_EXTERNAL_CACHE.equals(tag)) {
|
||||
File[] externalCacheDirs = getExternalCacheDirs(context);
|
||||
if (externalCacheDirs.length > 0) {
|
||||
target = externalCacheDirs[0];
|
||||
}
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
|
||||
&& TAG_EXTERNAL_MEDIA.equals(tag)) {
|
||||
File[] externalMediaDirs = context.getExternalMediaDirs();
|
||||
if (externalMediaDirs.length > 0) {
|
||||
target = externalMediaDirs[0];
|
||||
}
|
||||
}
|
||||
|
||||
if (target != null) {
|
||||
strat.addRoot(name, buildPath(target, path));
|
||||
}
|
||||
{
|
||||
File[] externalCacheDirs = getExternalCacheDirs(context);
|
||||
if (externalCacheDirs.length > 0) {
|
||||
strat.addRoot("external_cache_files", buildPath(externalCacheDirs[0], "."));
|
||||
}
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
File[] externalMediaDirs = context.getExternalMediaDirs();
|
||||
if (externalMediaDirs.length > 0) {
|
||||
strat.addRoot("external_media_files", buildPath(externalMediaDirs[0], "."));
|
||||
}
|
||||
}
|
||||
|
||||
return strat;
|
||||
}
|
||||
|
||||
|
||||
interface PathStrategy {
|
||||
|
||||
Uri getUriForFile(File file);
|
||||
|
||||
|
||||
File getFileForUri(Uri uri);
|
||||
}
|
||||
|
||||
|
||||
static class SimplePathStrategy implements PathStrategy {
|
||||
private final String mAuthority;
|
||||
private final HashMap<String, File> mRoots = new HashMap<>();
|
||||
@@ -263,7 +193,6 @@ public class FileProvider extends ContentProvider {
|
||||
mAuthority = authority;
|
||||
}
|
||||
|
||||
|
||||
void addRoot(String name, File root) {
|
||||
if (TextUtils.isEmpty(name)) {
|
||||
throw new IllegalArgumentException("Name must not be empty");
|
||||
@@ -47,10 +47,9 @@ public class Networking {
|
||||
} catch (Exception e) {
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
// Failed to update SSL provider, use NoSSLv3SocketFactory on SDK < 21
|
||||
// and return false to notify potential issues
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(new NoSSLv3SocketFactory());
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
35
app/signing/build.gradle.kts
Normal file
35
app/signing/build.gradle.kts
Normal file
@@ -0,0 +1,35 @@
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
|
||||
plugins {
|
||||
id("java-library")
|
||||
id("java")
|
||||
id("com.github.johnrengelman.shadow") version "6.0.0"
|
||||
}
|
||||
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
val jar by tasks.getting(Jar::class) {
|
||||
manifest {
|
||||
attributes["Main-Class"] = "com.topjohnwu.signing.ZipSigner"
|
||||
}
|
||||
}
|
||||
|
||||
val shadowJar by tasks.getting(ShadowJar::class) {
|
||||
archiveBaseName.set("zipsigner")
|
||||
archiveClassifier.set(null as String?)
|
||||
archiveVersion.set("4.0")
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
|
||||
|
||||
api("org.bouncycastle:bcprov-jdk15on:1.67")
|
||||
api("org.bouncycastle:bcpkix-jdk15on:1.67")
|
||||
}
|
||||
772
app/signing/src/main/java/com/topjohnwu/signing/ApkSignerV2.java
Normal file
772
app/signing/src/main/java/com/topjohnwu/signing/ApkSignerV2.java
Normal file
File diff suppressed because it is too large
Load Diff
174
app/signing/src/main/java/com/topjohnwu/signing/JarMap.java
Normal file
174
app/signing/src/main/java/com/topjohnwu/signing/JarMap.java
Normal file
@@ -0,0 +1,174 @@
|
||||
package com.topjohnwu.signing;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.JarInputStream;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
public abstract class JarMap implements Closeable {
|
||||
|
||||
LinkedHashMap<String, JarEntry> entryMap;
|
||||
|
||||
public static JarMap open(String file) throws IOException {
|
||||
return new FileMap(new File(file), true, ZipFile.OPEN_READ);
|
||||
}
|
||||
|
||||
public static JarMap open(File file, boolean verify) throws IOException {
|
||||
return new FileMap(file, verify, ZipFile.OPEN_READ);
|
||||
}
|
||||
|
||||
public static JarMap open(String file, boolean verify) throws IOException {
|
||||
return new FileMap(new File(file), verify, ZipFile.OPEN_READ);
|
||||
}
|
||||
|
||||
public static JarMap open(InputStream is, boolean verify) throws IOException {
|
||||
return new StreamMap(is, verify);
|
||||
}
|
||||
|
||||
public File getFile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract Manifest getManifest() throws IOException;
|
||||
|
||||
public InputStream getInputStream(ZipEntry ze) throws IOException {
|
||||
JarMapEntry e = getMapEntry(ze.getName());
|
||||
return e != null ? e.data.getInputStream() : null;
|
||||
}
|
||||
|
||||
public OutputStream getOutputStream(ZipEntry ze) {
|
||||
if (entryMap == null)
|
||||
entryMap = new LinkedHashMap<>();
|
||||
JarMapEntry e = new JarMapEntry(ze.getName());
|
||||
entryMap.put(ze.getName(), e);
|
||||
return e.data;
|
||||
}
|
||||
|
||||
public byte[] getRawData(ZipEntry ze) throws IOException {
|
||||
JarMapEntry e = getMapEntry(ze.getName());
|
||||
return e != null ? e.data.toByteArray() : null;
|
||||
}
|
||||
|
||||
public abstract Enumeration<JarEntry> entries();
|
||||
|
||||
public final ZipEntry getEntry(String name) {
|
||||
return getJarEntry(name);
|
||||
}
|
||||
|
||||
public JarEntry getJarEntry(String name) {
|
||||
return getMapEntry(name);
|
||||
}
|
||||
|
||||
JarMapEntry getMapEntry(String name) {
|
||||
JarMapEntry e = null;
|
||||
if (entryMap != null)
|
||||
e = (JarMapEntry) entryMap.get(name);
|
||||
return e;
|
||||
}
|
||||
|
||||
private static class FileMap extends JarMap {
|
||||
|
||||
private JarFile jarFile;
|
||||
|
||||
FileMap(File file, boolean verify, int mode) throws IOException {
|
||||
jarFile = new JarFile(file, verify, mode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getFile() {
|
||||
return new File(jarFile.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Manifest getManifest() throws IOException {
|
||||
return jarFile.getManifest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream(ZipEntry ze) throws IOException {
|
||||
InputStream is = super.getInputStream(ze);
|
||||
return is != null ? is : jarFile.getInputStream(ze);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getRawData(ZipEntry ze) throws IOException {
|
||||
byte[] b = super.getRawData(ze);
|
||||
if (b != null)
|
||||
return b;
|
||||
ByteArrayStream bytes = new ByteArrayStream();
|
||||
bytes.readFrom(jarFile.getInputStream(ze));
|
||||
return bytes.toByteArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<JarEntry> entries() {
|
||||
return jarFile.entries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JarEntry getJarEntry(String name) {
|
||||
JarEntry e = getMapEntry(name);
|
||||
return e != null ? e : jarFile.getJarEntry(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
jarFile.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static class StreamMap extends JarMap {
|
||||
|
||||
private JarInputStream jis;
|
||||
|
||||
StreamMap(InputStream is, boolean verify) throws IOException {
|
||||
jis = new JarInputStream(is, verify);
|
||||
entryMap = new LinkedHashMap<>();
|
||||
JarEntry entry;
|
||||
while ((entry = jis.getNextJarEntry()) != null) {
|
||||
entryMap.put(entry.getName(), new JarMapEntry(entry, jis));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Manifest getManifest() {
|
||||
return jis.getManifest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enumeration<JarEntry> entries() {
|
||||
return Collections.enumeration(entryMap.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
jis.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static class JarMapEntry extends JarEntry {
|
||||
|
||||
ByteArrayStream data;
|
||||
|
||||
JarMapEntry(JarEntry je, InputStream is) {
|
||||
super(je);
|
||||
data = new ByteArrayStream();
|
||||
data.readFrom(is);
|
||||
}
|
||||
|
||||
JarMapEntry(String s) {
|
||||
super(s);
|
||||
data = new ByteArrayStream();
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user