mirror of
				https://github.com/topjohnwu/Magisk
				synced 2025-10-30 09:00:52 +01:00 
			
		
		
		
	Compare commits
	
		
			1770 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | cfe32f1a70 | ||
|   | d877f5d5c6 | ||
|   | 0ab6ffefb4 | ||
|   | a292a1d23a | ||
|   | 3f87f6aee3 | ||
|   | 04bcd145d3 | ||
|   | 244e811291 | ||
|   | ac7467fb59 | ||
|   | 2c0436216f | ||
|   | 017fbf267b | ||
|   | e6afbf2ec0 | ||
|   | 906b4aad9e | ||
|   | 4cf8d41f6a | ||
|   | 47c860142e | ||
|   | 2fba3f213b | ||
|   | af7c6f9fce | ||
|   | 78534deab6 | ||
|   | 6710314832 | ||
|   | 0cd4fa6fa0 | ||
|   | 065949496e | ||
|   | 39c82576ae | ||
|   | 37221a508d | ||
|   | 6b43a32a10 | ||
|   | d7cd1ff142 | ||
|   | 659d947863 | ||
|   | 39be7a6288 | ||
|   | 8ac976c579 | ||
|   | 70fd432c57 | ||
|   | 00135f2f49 | ||
|   | 9b944bc29c | ||
|   | d520b3d2a0 | ||
|   | 6f41d9855b | ||
|   | 2d7c1da741 | ||
|   | c0f45b6b1e | ||
|   | 7a0025673c | ||
|   | ad7ec79903 | ||
|   | 0543239cca | ||
|   | ff3dad2457 | ||
|   | 298d5e197b | ||
|   | d73c0a998d | ||
|   | 1b79a3ddbf | ||
|   | a8478ace18 | ||
|   | 72cf5f3f9f | ||
|   | 6f9d493a18 | ||
|   | 08f7d5ebff | ||
|   | 1fe3675403 | ||
|   | a0f956d2c1 | ||
|   | 1560f91b4a | ||
|   | c20f362594 | ||
|   | 7ae8c26e50 | ||
|   | adfffe6121 | ||
|   | 64601baa76 | ||
|   | aa374b51f1 | ||
|   | 5c483745ff | ||
|   | 0c247110a0 | ||
|   | 1643638a78 | ||
|   | 4ace228fc2 | ||
|   | 25aa86a0dc | ||
|   | 70d3b24338 | ||
|   | 8664e9d19b | ||
|   | 50d9877446 | ||
|   | fe06352089 | ||
|   | 7b599419b5 | ||
|   | 491adf072e | ||
|   | f6aae2b048 | ||
|   | d2d5c94633 | ||
|   | 10581f9ef2 | ||
|   | c7e0e1c038 | ||
|   | a914d701eb | ||
|   | 0f9dee6e9c | ||
|   | aa383e2190 | ||
|   | 9bbfcf326c | ||
|   | 3948e67c8f | ||
|   | d56e1b2cc5 | ||
|   | bfac1f1bc2 | ||
|   | d4a956c355 | ||
|   | 6c71fefa58 | ||
|   | ad3003c00a | ||
|   | 0ad5dcb258 | ||
|   | d790309b02 | ||
|   | 1072faf309 | ||
|   | d2c196896d | ||
|   | e42b608444 | ||
|   | 89a501a3af | ||
|   | c19b78180c | ||
|   | c0b750a09a | ||
|   | c967e618a1 | ||
|   | 59f78d7dfc | ||
|   | d8405f0d05 | ||
|   | 0f34f0033c | ||
|   | 190646d50c | ||
|   | a46c6252c6 | ||
|   | 5c1886c8f5 | ||
|   | afcb3d8f34 | ||
|   | 9fbffafdbf | ||
|   | 075f0458f7 | ||
|   | d4568aa0a7 | ||
|   | 97588408a2 | ||
|   | 1def9b301b | ||
|   | 5bac442b18 | ||
|   | 6add682705 | ||
|   | 8b50d84a05 | ||
|   | d3858b81e2 | ||
|   | bdff9769be | ||
|   | c61df75e5e | ||
|   | a74bf2cc27 | ||
|   | ada0f93686 | ||
|   | ff36f2ba17 | ||
|   | 5164cfd399 | ||
|   | 5fa021503e | ||
|   | 7b5d79d313 | ||
|   | 3e3f38500d | ||
|   | 5109b9abfd | ||
|   | 7fb4777c1c | ||
|   | c38533e0f8 | ||
|   | 51ba99d09e | ||
|   | 9159f86a9e | ||
|   | e139f4fc13 | ||
|   | 2fbfeacb87 | ||
|   | ebb7a9fcda | ||
|   | 9e72317302 | ||
|   | d764c20c08 | ||
|   | 9c17b8a098 | ||
|   | 3084873154 | ||
|   | 32809e56d0 | ||
|   | 9f05b182a2 | ||
|   | 525484e834 | ||
|   | 65a4e69cae | ||
|   | e973f8bab9 | ||
|   | 92466671ff | ||
|   | 6d61106070 | ||
|   | ac13749fb8 | ||
|   | 7ec1a9a316 | ||
|   | cf17e21ad3 | ||
|   | 0e0240c4ab | ||
|   | d1b290b91a | ||
|   | a63696836c | ||
|   | 46aad00f16 | ||
|   | 252afe8932 | ||
|   | 9dd467a613 | ||
|   | 4c14df67cc | ||
|   | 20e0fe3ba1 | ||
|   | 6a005135f2 | ||
|   | 82e8375957 | ||
|   | bb25edc09e | ||
|   | 169c0fe4af | ||
|   | cd6918e6eb | ||
|   | 5be035fd44 | ||
|   | f1edc8443c | ||
|   | d9564bd04c | ||
|   | 35f1c396f2 | ||
|   | 6acb950990 | ||
|   | 27e0d1641a | ||
|   | 9ac71ff8af | ||
|   | 075737a4ec | ||
|   | 6d0e4a6a5e | ||
|   | a2544768a0 | ||
|   | 8574a14ed2 | ||
|   | e90c555c18 | ||
|   | 863b9a410f | ||
|   | 23c7bbc7d5 | ||
|   | f900189f90 | ||
|   | 7c74be2790 | ||
|   | 70dd2d4829 | ||
|   | 914b7ee056 | ||
|   | e39f83edbf | ||
|   | 52fe0c6abb | ||
|   | 5cb3e5937f | ||
|   | e0cd224831 | ||
|   | de225ac64a | ||
|   | 5807808a10 | ||
|   | 362877d18f | ||
|   | 88b8dd0149 | ||
|   | 1552f32e09 | ||
|   | 50b73a6720 | ||
|   | 53e51f1735 | ||
|   | 40b63bfebe | ||
|   | 89861eceef | ||
|   | b8eaff66fa | ||
|   | a747fdd27d | ||
|   | 27851bdefa | ||
|   | 3fdeb40ddf | ||
|   | 546c7cebd3 | ||
|   | 473902f5f4 | ||
|   | 41c0721159 | ||
|   | 413d4badfd | ||
|   | c5d67ebf72 | ||
|   | 91818cfa1a | ||
|   | 6263d684d9 | ||
|   | 07140d33a7 | ||
|   | 4ffc388491 | ||
|   | 0ef026c610 | ||
|   | 153c7fdf20 | ||
|   | 90379eeb35 | ||
|   | 3ae959af95 | ||
|   | c8cc652b71 | ||
|   | 4b6285e5c2 | ||
|   | 013de7b3ef | ||
|   | e11e88a9c5 | ||
|   | 7cec8baa55 | ||
|   | e987db9fb5 | ||
|   | c603b9084f | ||
|   | 492d6dfcf0 | ||
|   | a3e0f2dcc3 | ||
|   | cf211e26f4 | ||
|   | c5aaaa7c55 | ||
|   | f86d077e27 | ||
|   | f8076825cb | ||
|   | 201d8a97d4 | ||
|   | d08f326990 | ||
|   | 8dc9d3bc78 | ||
|   | adf95ce3a0 | ||
|   | 3c1aca114f | ||
|   | 18d0fd9d2a | ||
|   | c2e673f978 | ||
|   | 2bde8a1975 | ||
|   | bf9927c7dd | ||
|   | f339a087a2 | ||
|   | 6ccc5f3788 | ||
|   | 1affb91f17 | ||
|   | 7779c3e372 | ||
|   | 49ba7ad22e | ||
|   | 6ad33d60f7 | ||
|   | 0117274061 | ||
|   | e50192a407 | ||
|   | c6fc0e587e | ||
|   | 68c448bc34 | ||
|   | ef62272df7 | ||
|   | 375cd0e42b | ||
|   | b885ccbd63 | ||
|   | da6f1d0f12 | ||
|   | 3934821436 | ||
|   | c3b473e4bc | ||
|   | 4c0d435b6b | ||
|   | 7ed2c077de | ||
|   | 52a6a7bce8 | ||
|   | 1283167595 | ||
|   | 23c2e22910 | ||
|   | f44b2dbd45 | ||
|   | 46ee2c3f4e | ||
|   | 5d5ec08566 | ||
|   | 0e717a2de4 | ||
|   | cada862214 | ||
|   | c3a6179a21 | ||
|   | 682c6d4e7b | ||
|   | d0a253c97e | ||
|   | c0e2b3027b | ||
|   | e7dc14b07d | ||
|   | 0da9146e90 | ||
|   | ad05a33e02 | ||
|   | ef175e3cbe | ||
|   | 4de51d93ef | ||
|   | 8224e038a3 | ||
|   | 03c04c2141 | ||
|   | 2e091b04e5 | ||
|   | 60296493fe | ||
|   | 20c20f8f9b | ||
|   | f1d642a4e5 | ||
|   | e0e5ea17a4 | ||
|   | 91a0ba72dc | ||
|   | c54c5a974a | ||
|   | 532b8c54ab | ||
|   | 5ac87891b5 | ||
|   | 2d905ce3fb | ||
|   | 831112abd2 | ||
|   | 153d0f5505 | ||
|   | c78896a335 | ||
|   | 316ec98e0f | ||
|   | cf58545a45 | ||
|   | e7a2144def | ||
|   | 52a2c6958b | ||
|   | 70243d7a47 | ||
|   | b5b8c4b725 | ||
|   | 6c4d81b1e9 | ||
|   | 513d732934 | ||
|   | c88dc8795b | ||
|   | a8030c39b1 | ||
|   | 7243b9e72f | ||
|   | d149af9628 | ||
|   | c0ac2d540b | ||
|   | 528634d755 | ||
|   | 3283439fd4 | ||
|   | e86015badc | ||
|   | c8f65fc9a1 | ||
|   | c8216f9bc5 | ||
|   | e579f314a6 | ||
|   | 2c4001387e | ||
|   | caa39474cb | ||
|   | 7684602ea8 | ||
|   | d1a7372bd2 | ||
|   | 4601989d4a | ||
|   | 23f697d62b | ||
|   | e837bdc8ad | ||
|   | 7265450e2e | ||
|   | 058dbc9f9e | ||
|   | daf9b019c6 | ||
|   | 14eebd582f | ||
|   | 9a8eeacee8 | ||
|   | 45b0bf5bc5 | ||
|   | 88db822c43 | ||
|   | fbf3588fdf | ||
|   | a82ef6bd35 | ||
|   | 312466aaf8 | ||
|   | c0ca99f4b4 | ||
|   | 196f15d240 | ||
|   | bfddef2671 | ||
|   | 44395e8ff0 | ||
|   | 4ff39f8817 | ||
|   | 1df41003ec | ||
|   | 1f39ee41ad | ||
|   | 42d8b1ecb9 | ||
|   | a4da7b33e6 | ||
|   | e4ee9e9095 | ||
|   | 835ece5469 | ||
|   | 77430a282f | ||
|   | d93fc67a75 | ||
|   | 838f3cc01e | ||
|   | 4d5841332a | ||
|   | 9b41976252 | ||
|   | d08fd0561a | ||
|   | 30e459252c | ||
|   | a6958ac139 | ||
|   | d7d76f54cc | ||
|   | e6c1dd532d | ||
|   | 970a2e87b3 | ||
|   | cabaae8403 | ||
|   | d1f301e059 | ||
|   | 79eb5b2ed2 | ||
|   | f0533fca70 | ||
|   | 08e98eeb15 | ||
|   | f2064a84ed | ||
|   | b2f719989d | ||
|   | 1e812c40ce | ||
|   | a949641342 | ||
|   | 6db27c7758 | ||
|   | c231e88a5d | ||
|   | 3f83919e09 | ||
|   | 72a5b83544 | ||
|   | d2e8ecc646 | ||
|   | 30eb4074cb | ||
|   | 79c71509f6 | ||
|   | 5dab580cfc | ||
|   | 9929e7d8e8 | ||
|   | f6ee252572 | ||
|   | 90d218ebc8 | ||
|   | 499a157946 | ||
|   | c5a7ab2415 | ||
|   | 3dd5a6f378 | ||
|   | 7be26a0677 | ||
|   | c183fdd3ca | ||
|   | baa439457e | ||
|   | 4dbcd54b72 | ||
|   | 11062f2d4f | ||
|   | b0a5dbb4c2 | ||
|   | 0abdfda5a2 | ||
|   | a0466085fe | ||
|   | a7ceb04cb7 | ||
|   | 274efb49e7 | ||
|   | b3cd83bbca | ||
|   | b8bd83ba05 | ||
|   | 34dcf49fbc | ||
|   | f2f7d77847 | ||
|   | b2105f2d88 | ||
|   | 4126f3bdcb | ||
|   | 74ccfe6088 | ||
|   | 48085b5573 | ||
|   | ef2f8d485b | ||
|   | 9fb9212b0a | ||
|   | 7b9ddc9b3b | ||
|   | 15726a759c | ||
|   | 2c7474ea87 | ||
|   | c726aee643 | ||
|   | f31a24b16d | ||
|   | b436bce565 | ||
|   | 886286a819 | ||
|   | c3e94e1480 | ||
|   | 5f1343e5b4 | ||
|   | ffb1303d61 | ||
|   | a0b0d938f0 | ||
|   | 158f5ba7d9 | ||
|   | b8cf40161c | ||
|   | fb96e6a56f | ||
|   | 6668ba2511 | ||
|   | 6d93831488 | ||
|   | 4668ef3020 | ||
|   | bcdadc6581 | ||
|   | 36448191b7 | ||
|   | be5be108c3 | ||
|   | c9ca42aaa9 | ||
|   | 630f2b7d19 | ||
|   | dde0a4a7c8 | ||
|   | c0e2f44092 | ||
|   | 1412fcbb22 | ||
|   | c69dc0f036 | ||
|   | 9b445d89a1 | ||
|   | c3c78428c4 | ||
|   | c6d2bf577f | ||
|   | b06f69573d | ||
|   | 8fd03f7434 | ||
|   | 25703c1750 | ||
|   | 90e4ac2d23 | ||
|   | 956bceae75 | ||
|   | c663be86de | ||
|   | aca78baecf | ||
|   | fbcf6b7954 | ||
|   | 84123222aa | ||
|   | e9dbcf693d | ||
|   | 1cd0a9d48f | ||
|   | 1b48e44914 | ||
|   | 0a398f03fd | ||
|   | 3a9a3ed184 | ||
|   | 88fae36b8a | ||
|   | 15ed3e52f2 | ||
|   | 8990919dab | ||
|   | e5638e4b15 | ||
|   | 404c6fac9a | ||
|   | fc9d4034a9 | ||
|   | cecc0b932d | ||
|   | 0faed7159c | ||
|   | fb491cfdcf | ||
|   | fc706dcb40 | ||
|   | a2c1b024f3 | ||
|   | 267395bfa2 | ||
|   | 920fc5ae99 | ||
|   | 92ed0ae51b | ||
|   | 3d865394d7 | ||
|   | 76ef1d0d86 | ||
|   | c694776162 | ||
|   | 9484ec0c17 | ||
|   | 7e2ba41c64 | ||
|   | 614c552e55 | ||
|   | 7db3d84ba2 | ||
|   | bb2c744ec0 | ||
|   | 87f6018468 | ||
|   | 9194c50590 | ||
|   | 873f14bbe0 | ||
|   | 31110b1927 | ||
|   | 6764a98409 | ||
|   | 7ff45974c6 | ||
|   | fd7b5f393a | ||
|   | 2533a4fc4a | ||
|   | 2ca528f93f | ||
|   | 42284c5efb | ||
|   | ce2e6b7d35 | ||
|   | 684c5d225a | ||
|   | b75018b03b | ||
|   | 41499d4b3c | ||
|   | 383c97c303 | ||
|   | 74b54ef371 | ||
|   | bbf7b4db79 | ||
|   | c61f0acab5 | ||
|   | 398af123b2 | ||
|   | 315fa9d7d3 | ||
|   | fb5e8ef40c | ||
|   | 7d7686da33 | ||
|   | e79d764148 | ||
|   | ebbee0dc43 | ||
|   | 65e455ef0b | ||
|   | ed0c16e201 | ||
|   | 209fdf349a | ||
|   | f49f2afacd | ||
|   | 8c6330a3c4 | ||
|   | 337b777125 | ||
|   | 1b756e8d96 | ||
|   | ac05e2f2e2 | ||
|   | 787f7b3035 | ||
|   | 31bd642b80 | ||
|   | f0bac6b154 | ||
|   | cc7e74ca11 | ||
|   | 52d478df1a | ||
|   | e8a44646b8 | ||
|   | 0c782edf21 | ||
|   | e3948d295e | ||
|   | 5f2c742a5c | ||
|   | ae97d011ae | ||
|   | 1b7657a374 | ||
|   | 5665e04014 | ||
|   | b30c77aab9 | ||
|   | a5916b9c49 | ||
|   | 453180e30b | ||
|   | 8bd432d391 | ||
|   | c9d3e20aef | ||
|   | bb70385a42 | ||
|   | 9855877b03 | ||
|   | d5408d1f09 | ||
|   | f334532aba | ||
|   | be77c09f3d | ||
|   | 7de6a92753 | ||
|   | 36f76f5a14 | ||
|   | b84523d557 | ||
|   | 21a557a184 | ||
|   | 2c78c415e9 | ||
|   | 79ccb30dd2 | ||
|   | 3c566becf6 | ||
|   | 76c9188fae | ||
|   | e4e5269836 | ||
|   | 9e737df534 | ||
|   | 151ca593af | ||
|   | 4132eacba0 | ||
|   | 06e6151816 | ||
|   | 70277d4edd | ||
|   | d21d2f1a9c | ||
|   | 74a7be996f | ||
|   | 0b3192c4d5 | ||
|   | 968e6237bd | ||
|   | d780b5a0e4 | ||
|   | 3e48427eaf | ||
|   | 31360c34ed | ||
|   | e9624e2304 | ||
|   | 3f38579529 | ||
|   | 4d5a9f6e15 | ||
|   | 41f47acd76 | ||
|   | 821dcaa7c7 | ||
|   | 7135d26419 | ||
|   | f7fd354dce | ||
|   | 0c69a65bc4 | ||
|   | 2f2ca5eab4 | ||
|   | 9c6e64f47d | ||
|   | 0afa601551 | ||
|   | df9c40c035 | ||
|   | 25b67017e4 | ||
|   | bc9c3346f3 | ||
|   | 1db7e19fe8 | ||
|   | 102c03ce2b | ||
|   | ec19eb4455 | ||
|   | 6d9924d50e | ||
|   | 16c4d74274 | ||
|   | e4af5fd36a | ||
|   | 702775493a | ||
|   | b2ae826066 | ||
|   | cc3e9990fa | ||
|   | 271cbddd5e | ||
|   | 26dfbb3028 | ||
|   | f16cd987e4 | ||
|   | c1423ca9ad | ||
|   | 74379150a1 | ||
|   | a94fa81195 | ||
|   | 6119c24720 | ||
|   | c840a30c30 | ||
|   | ae5277a898 | ||
|   | bffa837825 | ||
|   | b9e7d0faea | ||
|   | 860b08d9ed | ||
|   | 691dc1d49e | ||
|   | 7da205f4c8 | ||
|   | 9d6886d367 | ||
|   | 9589b68f5a | ||
|   | 28d88af1af | ||
|   | 8b5acd1849 | ||
|   | 33dc63a7fd | ||
|   | 754fafcfe9 | ||
|   | bd7766b17e | ||
|   | 70b7d73453 | ||
|   | 5ad4702a5b | ||
|   | 40b6fe03c2 | ||
|   | 49ecba2476 | ||
|   | ebd509d92d | ||
|   | 7193374a7e | ||
|   | 6728445542 | ||
|   | 10ed299c78 | ||
|   | d0a86385b7 | ||
|   | 32b124913e | ||
|   | 599ae95251 | ||
|   | d1be34c34a | ||
|   | bc2cac90fe | ||
|   | 50a49e2c8c | ||
|   | c60adb113e | ||
|   | aee015e8f6 | ||
|   | bf6af29205 | ||
|   | 329905d472 | ||
|   | 00d450d262 | ||
|   | 2365d1bd20 | ||
|   | 5b385c18e5 | ||
|   | 98c0434ec0 | ||
|   | f318d0a3bc | ||
|   | 27f5b410c0 | ||
|   | 3f55be9676 | ||
|   | 28350e3ad9 | ||
|   | f48e6c93b8 | ||
|   | 7cfc24d68f | ||
|   | a58d3ea04d | ||
|   | dfee9954e0 | ||
|   | eed86c760f | ||
|   | c471bb6f67 | ||
|   | 518c2b0f95 | ||
|   | 328fc44194 | ||
|   | b6f735a8f6 | ||
|   | b05d2d3a2d | ||
|   | deae08fc4b | ||
|   | 19af5f9e0b | ||
|   | c61135ee7b | ||
|   | f37f330670 | ||
|   | 40082d4571 | ||
|   | 97cf15007f | ||
|   | 00d655f346 | ||
|   | 821726e7c0 | ||
|   | e8302dfbe2 | ||
|   | 558f95cf7e | ||
|   | 18f6ead891 | ||
|   | 759e905c3c | ||
|   | 8bf7e42913 | ||
|   | 0dcd073554 | ||
|   | 2fe35d578d | ||
|   | 8d139e156e | ||
|   | 7c2849356a | ||
|   | 0025ffd1c0 | ||
|   | 2ef7146642 | ||
|   | 10bd25be52 | ||
|   | 1b27e69e40 | ||
|   | 65511845d2 | ||
|   | 1c743839ea | ||
|   | bcae9dec41 | ||
|   | 482c9af41f | ||
|   | 8e7b757efd | ||
|   | 1ab543cea1 | ||
|   | a3f86903e4 | ||
|   | c239c305ab | ||
|   | 2bf2e7461f | ||
|   | 7d1082b1cb | ||
|   | 0dbae83aec | ||
|   | f927c1b997 | ||
|   | 89ec7dad2b | ||
|   | 4fd61345af | ||
|   | 2e02af994e | ||
|   | 66cca24453 | ||
|   | 2f4062a923 | ||
|   | e733484fab | ||
|   | e5c3183025 | ||
|   | 836d9afe17 | ||
|   | 007a352742 | ||
|   | e526e5659e | ||
|   | 4a5227c7bf | ||
|   | c2c151ec4c | ||
|   | 452096e7e4 | ||
|   | 50c2a9859e | ||
|   | 677b667307 | ||
|   | 930c82316a | ||
|   | 3dc22db265 | ||
|   | d8c51cb286 | ||
|   | 2f79d0c3b3 | ||
|   | 5c338cd0a7 | ||
|   | d8bb3af06b | ||
|   | e139e8777b | ||
|   | 1adf331268 | ||
|   | 349b3e961b | ||
|   | 96650c06f0 | ||
|   | 26038a0a07 | ||
|   | 6a148b5dd9 | ||
|   | 0e109ef979 | ||
|   | d52d7cfbd9 | ||
|   | 4f74a259e3 | ||
|   | de2285d5e9 | ||
|   | b2483ba437 | ||
|   | a82a5e5a49 | ||
|   | 74da6e1dc0 | ||
|   | 84ffdf0ed5 | ||
|   | 022b18c8ce | ||
|   | b92b1dcddb | ||
|   | d161a02e71 | ||
|   | d2b6a700b1 | ||
|   | af203cef24 | ||
|   | 673e917e76 | ||
|   | a3bd41db54 | ||
|   | 1472dbb291 | ||
|   | d58a8dc868 | ||
|   | 0d9527921a | ||
|   | e94be0b70e | ||
|   | f0e4aec0af | ||
|   | b0d65b5edd | ||
|   | 75532ef591 | ||
|   | 9a6d1bd700 | ||
|   | a7ed6c15d3 | ||
|   | 5ee49ba065 | ||
|   | f6ae7e1bf1 | ||
|   | 190d857949 | ||
|   | f7b4935677 | ||
|   | a3c49de6a5 | ||
|   | d34bd47bea | ||
|   | f17792380b | ||
|   | c11920110e | ||
|   | ec5a993fea | ||
|   | d250c2cc89 | ||
|   | 767e73f40c | ||
|   | 3f699c9d2f | ||
|   | 50dbd9befd | ||
|   | 760e01bf92 | ||
|   | 543f435b1e | ||
|   | e8dd1b292f | ||
|   | 91337218b3 | ||
|   | afff3c0a49 | ||
|   | d21264d01b | ||
|   | b0567eadfd | ||
|   | 5fc2058336 | ||
|   | d0567d29d2 | ||
|   | 2b6c271d37 | ||
|   | b0c1a6f73a | ||
|   | 4db0ad32f0 | ||
|   | a1871e4bc3 | ||
|   | d065040321 | ||
|   | 3aa0294cd4 | ||
|   | 17f0fea3fc | ||
|   | 8ca1e43533 | ||
|   | 310b266251 | ||
|   | 21b1b5098e | ||
|   | a3a4a5d8a5 | ||
|   | 270536f33c | ||
|   | 66bb433cc6 | ||
|   | bd4ef1a03a | ||
|   | aa2d9a3bf1 | ||
|   | bd01c314dc | ||
|   | 257308d5db | ||
|   | d4620e1654 | ||
|   | fd6cbb138c | ||
|   | aa75c8e5e4 | ||
|   | e404476609 | ||
|   | 942c870981 | ||
|   | c461fc6daa | ||
|   | baff9256c5 | ||
|   | b4c0a255fc | ||
|   | 9f6a27c20d | ||
|   | 742dc137ed | ||
|   | 39a6bd33ce | ||
|   | 4672a5fad6 | ||
|   | e649b0a2df | ||
|   | 96eaa833f5 | ||
|   | fd8dbe3eff | ||
|   | bb97cc594d | ||
|   | 70a322263e | ||
|   | c6f144d482 | ||
|   | 3709489b3a | ||
|   | 863b13a694 | ||
|   | e6fea4e6dd | ||
|   | 83bfc13056 | ||
|   | bc4f09209b | ||
|   | 145ef32e28 | ||
|   | 2212800a23 | ||
|   | 2e25431bb6 | ||
|   | 967ca17238 | ||
|   | 595c72147c | ||
|   | f3c3b5a649 | ||
|   | 1cd2c5e653 | ||
|   | b2873dd44b | ||
|   | bb80ab4026 | ||
|   | 32c8e7522f | ||
|   | a5e4f3cc6b | ||
|   | 80cabb338b | ||
|   | 2c69e2c151 | ||
|   | a30777bd9f | ||
|   | e989195a68 | ||
|   | c1dd23f5e0 | ||
|   | f93624a41c | ||
|   | 9f4559a059 | ||
|   | fd05cad303 | ||
|   | d58b06e493 | ||
|   | d7a6127273 | ||
|   | 997d58932e | ||
|   | b4015f877f | ||
|   | 8ee9984e4e | ||
|   | d15fff95b9 | ||
|   | 2f0b549027 | ||
|   | 87dbd7e541 | ||
|   | 96e5da36be | ||
|   | 43745edac0 | ||
|   | 687e3b13ea | ||
|   | 8c6bb383b7 | ||
|   | 18bee21cfc | ||
|   | e5b6121d17 | ||
|   | f5ceee547c | ||
|   | b612bce779 | ||
|   | 2e88e5e9c7 | ||
|   | 9a7aa25c90 | ||
|   | c4420fe932 | ||
|   | a5260f3a95 | ||
|   | bc592c1d13 | ||
|   | 968bd8be67 | ||
|   | 47ccf4b1f5 | ||
|   | a356b21895 | ||
|   | 614a36c888 | ||
|   | d8b8adb88c | ||
|   | f42d820891 | ||
|   | bc21a1fb71 | ||
|   | b7e717ee8c | ||
|   | f520fe36bd | ||
|   | 7273a1c34d | ||
|   | dc45cbce37 | ||
|   | 708d8f75c0 | ||
|   | bd37d90228 | ||
|   | b1ad691464 | ||
|   | f4e7baf31e | ||
|   | c0e60c41f2 | ||
|   | c8dad43e00 | ||
|   | 3bc31374ac | ||
|   | 858e7bae2b | ||
|   | a8f124704d | ||
|   | eed2816491 | ||
|   | a6334b3e35 | ||
|   | 334beebfeb | ||
|   | 13dad848bd | ||
|   | e518f4cef8 | ||
|   | c8fd5da2da | ||
|   | 3a74729ecc | ||
|   | 49c672ac4d | ||
|   | b570cb5b77 | ||
|   | 97bf388471 | ||
|   | 1a32aaea6f | ||
|   | 4635883dec | ||
|   | 8c02d120a2 | ||
|   | 3ba6db4a50 | ||
|   | 2f1de25747 | ||
|   | f60fd42ac0 | ||
|   | ecc8f9c792 | ||
|   | e295dfdcf7 | ||
|   | fc42c25390 | ||
|   | 27d5858e06 | ||
|   | 07e353f4ff | ||
|   | bb33d9e600 | ||
|   | 68eb0bdec9 | ||
|   | 32ee8e462c | ||
|   | e1ef732b60 | ||
|   | 9840b95c21 | ||
|   | a6f8446d81 | ||
|   | c1c844c830 | ||
|   | 389299afd1 | ||
|   | 826543a291 | ||
|   | 4ac83cfded | ||
|   | e79aa54b70 | ||
|   | 9a95652034 | ||
|   | 912c188b53 | ||
|   | e9d0f615ba | ||
|   | 9136573596 | ||
|   | 2487ec94e6 | ||
|   | 811489f157 | ||
|   | b438cc9335 | ||
|   | 1d3d30fa45 | ||
|   | 72b5985398 | ||
|   | 64c363ce53 | ||
|   | cca4347bf9 | ||
|   | 3ae3d4926a | ||
|   | 36025d6d9f | ||
|   | e171362e3e | ||
|   | 3e0bf2ae15 | ||
|   | 07aa9f4b8b | ||
|   | b2d9f3fc64 | ||
|   | 5fb3e9167e | ||
|   | 2db60e0a6b | ||
|   | e710848345 | ||
|   | 99c74b31be | ||
|   | ce5b13824e | ||
|   | c39170c42e | ||
|   | 9e96824161 | ||
|   | fd19fbf300 | ||
|   | 166469827f | ||
|   | a34ed538b6 | ||
|   | 8d6f3c2450 | ||
|   | f863d127e7 | ||
|   | 5f22d3e055 | ||
|   | a831110816 | ||
|   | fdd700f3e5 | ||
|   | adf930f126 | ||
|   | e97bdb53f4 | ||
|   | 05f41928cd | ||
|   | 2ee0829871 | ||
|   | 743560825d | ||
|   | e3d84ac349 | ||
|   | 266c832b30 | ||
|   | f5374a024e | ||
|   | fe1439fbac | ||
|   | 4956d826fb | ||
|   | f5cc2af5d0 | ||
|   | 2bc30e5c22 | ||
|   | 7244c02a0d | ||
|   | 84ca8e1f3e | ||
|   | 5880d4a6ec | ||
|   | ae05dce958 | ||
|   | 9ebe372a9a | ||
|   | 6c229ffa68 | ||
|   | e6e04cc5b3 | ||
|   | 12352510fd | ||
|   | 2b3d927937 | ||
|   | a8890740f5 | ||
|   | f60d7ee54b | ||
|   | 896ca2ef6b | ||
|   | c036f6d529 | ||
|   | 6f457c0c59 | ||
|   | cdc5d983f3 | ||
|   | 13bf1b27b4 | ||
|   | f742bb1c47 | ||
|   | 96688e4dac | ||
|   | 28a945fee9 | ||
|   | c7e777255a | ||
|   | 2dd4cf040e | ||
|   | aa0b9e2db2 | ||
|   | c10076f7ed | ||
|   | bcd92499f2 | ||
|   | b2bb0d4f72 | ||
|   | d1b9eca5eb | ||
|   | 594a67fe28 | ||
|   | cddeaffada | ||
|   | e140481f14 | ||
|   | 6b7b71b1f8 | ||
|   | 186bd11463 | ||
|   | a0490d6687 | ||
|   | beef740ade | ||
|   | 2ac7786a90 | ||
|   | a3fb5e910f | ||
|   | 319afe86b5 | ||
|   | 762ab66b86 | ||
|   | 0c239a42de | ||
|   | 2a8898e7c3 | ||
|   | ce3f3b09b4 | ||
|   | fe4b3df7e9 | ||
|   | 25bdbcf526 | ||
|   | df7eaa5598 | ||
|   | bb7099376b | ||
|   | 0327fd9710 | ||
|   | e645c6e465 | ||
|   | 78a3d36ccc | ||
|   | 3942858ccd | ||
|   | 03c8d716cc | ||
|   | e9322fba26 | ||
|   | 60181c4fcb | ||
|   | c215447405 | ||
|   | 39b6df27b3 | ||
|   | b1ee284e7f | ||
|   | e986332bf2 | ||
|   | 48f9b27381 | ||
|   | 42a6e0dd10 | ||
|   | d4798b02ac | ||
|   | 963edfe8ab | ||
|   | 53237f3ae0 | ||
|   | 64da9281a4 | ||
|   | ab7fd9799d | ||
|   | f6bcc84251 | ||
|   | 35dc3d9df9 | ||
|   | 566714a75d | ||
|   | c92f30b122 | ||
|   | 294ad094c4 | ||
|   | c1a0f520f9 | ||
|   | 89330b89d8 | ||
|   | a8f3718ed0 | ||
|   | a78ba44709 | ||
|   | ff110e3513 | ||
|   | 773c24b7fc | ||
|   | 8f926c7ca9 | ||
|   | cfae6c63b5 | ||
|   | dbfe49c56f | ||
|   | 98e21f9f5b | ||
|   | 83af0497e4 | ||
|   | 6ce37b44db | ||
|   | c562cbc2bb | ||
|   | 9cb1cf756f | ||
|   | 3fbbb0865a | ||
|   | 7d5f612a48 | ||
|   | 4a5a36440b | ||
|   | 43dd5cfea1 | ||
|   | 7b5fec1842 | ||
|   | ffa005e4ab | ||
|   | 5762ded601 | ||
|   | af102e47f1 | ||
|   | 73064a816d | ||
|   | a3abb86daa | ||
|   | 4f5c656b05 | ||
|   | 9b4ae8fcc5 | ||
|   | a31cddbe7b | ||
|   | a1a2c52409 | ||
|   | 9a0b26e0b0 | ||
|   | b805b96e16 | ||
|   | b4ecd93f1c | ||
|   | 590e7f7724 | ||
|   | 1a702b08b9 | ||
|   | 8c52dfb804 | ||
|   | 0acc23e058 | ||
|   | cdd5f9b628 | ||
|   | 4c9f5f4655 | ||
|   | b80ba13cb4 | ||
|   | 4d61e5e319 | ||
|   | 8c8a63ebfb | ||
|   | e5e34797a8 | ||
|   | 8516ebe6f5 | ||
|   | 9f6205f47f | ||
|   | 8b2ec23a89 | ||
|   | 1816ca6b02 | ||
|   | 7394ff9346 | ||
|   | bb5a6a1c28 | ||
|   | b614b06736 | ||
|   | 7a376c9efc | ||
|   | 8260bdc09c | ||
|   | 24f856e02b | ||
|   | 3aa619b928 | ||
|   | 4cb5e98d94 | ||
|   | 272910575e | ||
|   | a15a62f4bc | ||
|   | 53cf11db8c | ||
|   | 518f3d229f | ||
|   | 46c91f923d | ||
|   | 3a2262dfb3 | ||
|   | ff7c38f8e9 | ||
|   | 4229ba364f | ||
|   | ba8e7a211a | ||
|   | 6b41653a32 | ||
|   | 59c1125e72 | ||
|   | b536046720 | ||
|   | 619b805894 | ||
|   | 8662537883 | ||
|   | 717890395b | ||
|   | b7b4164f4f | ||
|   | 7e65296470 | ||
|   | cd5f5d702f | ||
|   | 01052fbe47 | ||
|   | a5e1e075c7 | ||
|   | 6be32ac688 | ||
|   | b362c0ef38 | ||
|   | bba9969e31 | ||
|   | 007ba24809 | ||
|   | df21539311 | ||
|   | 2592cb6019 | ||
|   | f7df17a7ed | ||
|   | 62f42b72f8 | ||
|   | a1ba4fda6f | ||
|   | 1c06b04c45 | ||
|   | 2ee22fd374 | ||
|   | 4c230d9e61 | ||
|   | 727294fbbe | ||
|   | 478c43969b | ||
|   | 79b5303350 | ||
|   | ce4b742b25 | ||
|   | a9dc15bda5 | ||
|   | ba6387ff5c | ||
|   | 8fa98508b7 | ||
|   | decdbaecf9 | ||
|   | 6d87cf9be0 | ||
|   | 94f434c4a6 | ||
|   | 7ba867c30b | ||
|   | 3424395e10 | ||
|   | 926c7359a2 | ||
|   | ec0af99a2e | ||
|   | b4d948886c | ||
|   | 4d8d79372a | ||
|   | 04a589722c | ||
|   | d4a10e2873 | ||
|   | 4998ad6c7e | ||
|   | a07ca5ff50 | ||
|   | f07e7571ab | ||
|   | 834c16485c | ||
|   | 04a4265ef3 | ||
|   | 0ec473195d | ||
|   | 0bf09256b0 | ||
|   | db8fd2c913 | ||
|   | dbe6e5b3d7 | ||
|   | cc81cd446b | ||
|   | 439c7118f1 | ||
|   | d8154a5815 | ||
|   | 4e3787bc0d | ||
|   | 02e0955924 | ||
|   | 3c6a170138 | ||
|   | a78950e822 | ||
|   | 1ce1a94a35 | ||
|   | 977b6d9f67 | ||
|   | b5e6dbd797 | ||
|   | 833e6688f1 | ||
|   | bc22c9f84f | ||
|   | 2149a7d116 | ||
|   | 29175d2c17 | ||
|   | 803454d5c8 | ||
|   | 36cf32dc42 | ||
|   | 657f4ab303 | ||
|   | c0c38022ea | ||
|   | 93b66d26ff | ||
|   | ea6552615d | ||
|   | 4bf3287fce | ||
|   | 832c2034c2 | ||
|   | b0aa26e1f1 | ||
|   | e52baeb967 | ||
|   | 8268eb9a83 | ||
|   | 3cc458abd9 | ||
|   | 337b4c4268 | ||
|   | 001f8657f6 | ||
|   | ea884e7fa1 | ||
|   | 9be2844c82 | ||
|   | 1b1394cf5d | ||
|   | 1eef930dbb | ||
|   | 875c687e3f | ||
|   | 1e175e74ed | ||
|   | 75a46c365e | ||
|   | 8e7b8825f5 | ||
|   | 2ecbca303b | ||
|   | 8195a4d616 | ||
|   | 7ba40f925f | ||
|   | 345cd1795f | ||
|   | 959aaee045 | ||
|   | 53477f0f59 | ||
|   | 5716218f41 | ||
|   | 9df6b9d5c0 | ||
|   | a0be47ab8b | ||
|   | ec46031d36 | ||
|   | 55b84d166a | ||
|   | 34ae8bacec | ||
|   | cb4e5ca0f7 | ||
|   | 0ba45468c4 | ||
|   | 710502784e | ||
|   | 0275a8558d | ||
|   | 58acc75cf6 | ||
|   | 874ababb9f | ||
|   | 3771e6b0cd | ||
|   | 33eaefa966 | ||
|   | cd7e236d57 | ||
|   | 54c0b7c7d5 | ||
|   | a2177daec2 | ||
|   | 628386b453 | ||
|   | b222bfb3e0 | ||
|   | ab199d883d | ||
|   | 356065d1ee | ||
|   | 76e7c5623d | ||
|   | 085fba050a | ||
|   | 295334d3ac | ||
|   | 36124ddca4 | ||
|   | bd6585765e | ||
|   | c325deb4ed | ||
|   | 73bb0b10ee | ||
|   | 72820b162c | ||
|   | 89e5b8d057 | ||
|   | da4f53ebbb | ||
|   | 8458553b74 | ||
|   | 55ecc41d06 | ||
|   | 28fcdf2cbb | ||
|   | 24087679a8 | ||
|   | 5ac6a8cb4a | ||
|   | 668d85d14e | ||
|   | c11a3dc95c | ||
|   | 56f57c20a2 | ||
|   | 240d14779a | ||
|   | 3550d1e61c | ||
|   | 6513ad249c | ||
|   | 50297b1880 | ||
|   | f189b78b9e | ||
|   | 5c0250f495 | ||
|   | 2093f726e9 | ||
|   | 10efe3859d | ||
|   | 6933bcf7bb | ||
|   | 2ea046cd80 | ||
|   | f4097a372b | ||
|   | 40b6de599c | ||
|   | 87ea2a2bef | ||
|   | cc14a1c361 | ||
|   | bcdface60d | ||
|   | 4dc9419d2e | ||
|   | d2bcac813e | ||
|   | 080c37a7f6 | ||
|   | c1c6f55f8f | ||
|   | f9a3838db6 | ||
|   | 1e61db104b | ||
|   | 30a9c7718d | ||
|   | 34b052b5d3 | ||
|   | aaa12853ad | ||
|   | b0ab55b0bf | ||
|   | d2f8496f4e | ||
|   | 4c7e081e15 | ||
|   | 1a69b16d36 | ||
|   | b5e8673e62 | ||
|   | 264c6a50b6 | ||
|   | 493642eb38 | ||
|   | 28d42b9164 | ||
|   | 42f29062ca | ||
|   | 09392be069 | ||
|   | 5529dab84e | ||
|   | 60ca704a9e | ||
|   | c4377ed6c2 | ||
|   | 7c4d5cee95 | ||
|   | 7d283ed65f | ||
|   | bf1f941e50 | ||
|   | 789fef34ba | ||
|   | 1daf5a611c | ||
|   | 6aed1db67e | ||
|   | cf68854770 | ||
|   | 711392c73b | ||
|   | 9573c32481 | ||
|   | a15f80f79d | ||
|   | 23e7475f06 | ||
|   | 1eb571b787 | ||
|   | dd3b716d85 | ||
|   | 28649c07e3 | ||
|   | 961e02be0d | ||
|   | a161491bfd | ||
|   | e0b4d1c1e4 | ||
|   | fd4aaab137 | ||
|   | 42d14d5ca2 | ||
|   | d3ff482c9b | ||
|   | c9286624d4 | ||
|   | f682368eeb | ||
|   | 4a5d033efb | ||
|   | 343161b195 | ||
|   | bc576a9659 | ||
|   | 19e407fcc4 | ||
|   | bc7327d004 | ||
|   | 666fa1c797 | ||
|   | 0eda4a7821 | ||
|   | 862058fd2b | ||
|   | 193d160bed | ||
|   | 69e5bcd57d | ||
|   | efeddda328 | ||
|   | 1ddd746862 | ||
|   | ff6938280e | ||
|   | 1e4425b30f | ||
|   | b5d1d8cdad | ||
|   | 029be5ccca | ||
|   | 29c2d785b5 | ||
|   | abda8cfa32 | ||
|   | 44e7d79d4c | ||
|   | 9a1dc8ee0e | ||
|   | 27879c3f01 | ||
|   | 29096eb5d7 | ||
|   | a573baea03 | ||
|   | 48ace3de57 | ||
|   | 5af07c4531 | ||
|   | 44e36feb09 | ||
|   | 3395c84560 | ||
|   | 2a7d996881 | ||
|   | 94c2fc80d2 | ||
|   | 738f943a68 | ||
|   | 47e62a5681 | ||
|   | 1ecbfd7590 | ||
|   | 67c139a04b | ||
|   | 31cc008249 | ||
|   | 9cb026439d | ||
|   | e6f10176c6 | ||
|   | 0917c79470 | ||
|   | 597baa986d | ||
|   | 75cc4b4843 | ||
|   | aac088d496 | ||
|   | a822e5bbc5 | ||
|   | c527249c21 | ||
|   | 9ef798f534 | ||
|   | e69b99f089 | ||
|   | 55b8079e86 | ||
|   | e272dbe9af | ||
|   | 962f8354ac | ||
|   | 20e4a960f7 | ||
|   | 371db886b4 | ||
|   | 3904ca38c0 | ||
|   | 16527ceaf6 | ||
|   | feec3e8255 | ||
|   | 82249cb50a | ||
|   | fad417e553 | ||
|   | 5ba692f50c | ||
|   | f799db67eb | ||
|   | 3e106a9dc5 | ||
|   | 907e01e524 | ||
|   | b8ed23efa7 | ||
|   | 2b3bbf7e67 | ||
|   | 464fe627a3 | ||
|   | 6a9e39c470 | ||
|   | 7fec9a3cc6 | ||
|   | 008f6ef462 | ||
|   | 2440c108ca | ||
|   | 430baad8a4 | ||
|   | 51132e74b4 | ||
|   | a4f33e106a | ||
|   | baba3190e0 | ||
|   | 47b13aa5ea | ||
|   | a0de3fc643 | ||
|   | 9de3c582c0 | ||
|   | 45cff2b51b | ||
|   | 670397a73e | ||
|   | 272eb37e9a | ||
|   | ca79e58ab9 | ||
|   | 977c049875 | ||
|   | aefbc1c9bf | ||
|   | c37a2e61ed | ||
|   | 7f6cd5e469 | ||
|   | f6d1f1985c | ||
|   | 222c31b306 | ||
|   | e99185f011 | ||
|   | 5c662f1230 | ||
|   | a65c7ee2fc | ||
|   | 743c4f554d | ||
|   | 838b2757eb | ||
|   | a92c9fc226 | ||
|   | ed052e0b0b | ||
|   | ae88d3054d | ||
|   | 7bb8b9039c | ||
|   | 3800b4b45c | ||
|   | cd498711bc | ||
|   | 411b600e14 | ||
|   | 0a0ad9a184 | ||
|   | 234bead59e | ||
|   | 76de310986 | ||
|   | 817f050bcd | ||
|   | 60ae685d1e | ||
|   | dc9670c439 | ||
|   | 03c8079858 | ||
|   | 0cfc527328 | ||
|   | f66a820e14 | ||
|   | 4c7bdbb284 | ||
|   | 435251ca41 | ||
|   | 324a0dd38f | ||
|   | cc77d93918 | ||
|   | 0ea7d8bd8c | ||
|   | 2e6bea23ac | ||
|   | ca75dd0728 | ||
|   | 849b217143 | ||
|   | 9af6efba59 | ||
|   | 079d6f06ef | ||
|   | 9cf0757689 | ||
|   | b54c438948 | ||
|   | c3ff4bfdad | ||
|   | e103676b65 | ||
|   | 17e395c2a8 | ||
|   | d50c1f39ab | ||
|   | ef6b25b3bb | ||
|   | 9f35fa0fa3 | ||
|   | ff48996bbe | ||
|   | 2fe4d97061 | ||
|   | eb38393cad | ||
|   | 5d62e066e2 | ||
|   | e94219c5a3 | ||
|   | 8ed9634adf | ||
|   | 0aefa9599f | ||
|   | e279cf0575 | ||
|   | a3f0ef8e77 | ||
|   | 8eba05ed4a | ||
|   | 2f78155723 | ||
|   | 6785221479 | ||
|   | 9bc410dd3d | ||
|   | 2491ab6bf9 | ||
|   | f615ed40cd | ||
|   | 430f2cafc1 | ||
|   | 0ad049da88 | ||
|   | 2c7691567b | ||
|   | 1d70d0fe94 | ||
|   | ac44f05811 | ||
|   | d99252f394 | ||
|   | b58c7ba7c5 | ||
|   | 8c5acd1a0a | ||
|   | b9b1ebf18c | ||
|   | 8ca132cef0 | ||
|   | a03bb90754 | ||
|   | d1c939f48a | ||
|   | 21b11f1b48 | ||
|   | 23c84a7803 | ||
|   | f9ab060403 | ||
|   | df7a5bf149 | ||
|   | e205969b11 | ||
|   | 6bf19ecc34 | ||
|   | c4afa069df | ||
|   | 1bfafdb44f | ||
|   | 1ef5bd7076 | ||
|   | 29176fa4f4 | ||
|   | 958c95732b | ||
|   | 44b0d4127c | ||
|   | 1418ec2416 | ||
|   | b51978f51c | ||
|   | b07361580a | ||
|   | 6ff45a754d | ||
|   | d1b5ebad7d | ||
|   | 32d2df0f08 | ||
|   | f4ce813de9 | ||
|   | b44ac994d8 | ||
|   | 333948814c | ||
|   | 1a51ad6e01 | ||
|   | 22a5c11f0d | ||
|   | 51b22d1ad4 | ||
|   | bef5969580 | ||
|   | c6bf7bb9cd | ||
|   | 2a84d92cbf | ||
|   | 62de36b0da | ||
|   | 03a9aaeff7 | ||
|   | 45765e292d | ||
|   | 6e28a26015 | ||
|   | 9150bf720d | ||
|   | 845864679c | ||
|   | b3b2149ebb | ||
|   | 0886dca385 | ||
|   | 53198ba4a7 | ||
|   | a9652ee1fd | ||
|   | 75caf2f01c | ||
|   | 65bab2666e | ||
|   | 6d93ae399a | ||
|   | 7239c2e31a | ||
|   | f269695d4a | ||
|   | 443af5f760 | ||
|   | 0e35350160 | ||
|   | 10bf497cda | ||
|   | 76eb629fc2 | ||
|   | 91de738563 | ||
|   | 43b7ef8110 | ||
|   | 99ef0b8cb4 | ||
|   | 0cf13f6393 | ||
|   | 4a8acfd123 | ||
|   | abaffc1908 | ||
|   | ea61d5c1a5 | ||
|   | 9a14931175 | ||
|   | 165eee102a | ||
|   | 6900c197cd | ||
|   | fe3c66a7c8 | ||
|   | 0efb4da0ee | ||
|   | 1d728475e3 | ||
|   | 827057b9f1 | ||
|   | ed7920d61e | ||
|   | c0379c8e25 | ||
|   | 00a0e64fdd | ||
|   | 0dc60debea | ||
|   | c44ae5888c | ||
|   | b9495cd1bb | ||
|   | bfec381933 | ||
|   | 2dddb8df69 | ||
|   | d30397e9c0 | ||
|   | d9597549fd | ||
|   | 13512b4146 | ||
|   | 49e546919a | ||
|   | 586015c2ed | ||
|   | 4a7e067d1a | ||
|   | 9bc0b7f183 | ||
|   | cd4dfc9861 | ||
|   | 1716452203 | ||
|   | 09bdbc1224 | ||
|   | 978b3a64c5 | ||
|   | 651547ef20 | ||
|   | b4d95977d0 | ||
|   | 5d8bb897db | ||
|   | 84c8ecb372 | ||
|   | 61abe5b948 | ||
|   | a5b573eaaa | ||
|   | cbb32f82eb | ||
|   | ca9334b2df | ||
|   | 959ed7f866 | ||
|   | a5c0411be0 | ||
|   | 32e1303742 | ||
|   | 7263b6fe89 | ||
|   | 46a4070f84 | ||
|   | c3c155a1ed | ||
|   | b067105660 | ||
|   | 15ca18848e | ||
|   | 67c9e2ead6 | ||
|   | 3681177be4 | ||
|   | 6eb814ef0b | ||
|   | bcc695234c | ||
|   | ad16a6fc1b | ||
|   | 478b7eeb65 | ||
|   | 151a153dc9 | ||
|   | ad131854ca | ||
|   | 0bd0eb9e59 | ||
|   | 54827cacb9 | ||
|   | e3a4a16507 | ||
|   | cf16fd0104 | ||
|   | 21b00ac6ca | ||
|   | 57e6f3080c | ||
|   | 89744100ce | ||
|   | a718f9bbfd | ||
|   | e81bc4f044 | ||
|   | 4dbacd79ae | ||
|   | ae74d54451 | ||
|   | dc316c5669 | ||
|   | e9f04256c9 | ||
|   | e1aabd70e8 | ||
|   | a9dc1b32e0 | ||
|   | 01d847ae4e | ||
|   | 61e2c3444a | ||
|   | 5363b0f810 | ||
|   | f0e1a8823e | ||
|   | 7be5937aa0 | ||
|   | 8f43055b0e | ||
|   | 953a81b299 | ||
|   | 1d34ae7934 | ||
|   | 2cabb2666b | ||
|   | 0b59bb1a29 | ||
|   | c1e7d74b96 | ||
|   | cc262d6595 | ||
|   | 61d43b118b | ||
|   | 989d8181dd | ||
|   | cffc157d98 | ||
|   | 2a70619577 | ||
|   | b91919bffa | ||
|   | fb7a4bf880 | ||
|   | 4b41799a90 | ||
|   | 123f39a21b | ||
|   | cadab12737 | ||
|   | 742055c43b | ||
|   | fa73b41fa7 | ||
|   | a474eafe84 | ||
|   | 442fcf921c | ||
|   | fb0923f3ab | ||
|   | 5bb943f845 | ||
|   | a3109953d0 | ||
|   | ff266c8c79 | ||
|   | ef2e02098d | ||
|   | 93598d3a51 | ||
|   | 53aebcfb1e | ||
|   | bb2467d2ac | ||
|   | 05c063b61d | ||
|   | ef1d1303f4 | ||
|   | b84ab656d8 | ||
|   | edd4b477f8 | ||
|   | 04fcb33d7e | ||
|   | f31d2486c9 | ||
|   | 7dea682713 | ||
|   | 7955ddceb2 | ||
|   | 8a6b254799 | ||
|   | 94562cb5cf | ||
|   | b064c124e7 | ||
|   | c7e64f40f9 | ||
|   | 0f254dca13 | ||
|   | e0f2ff36af | ||
|   | 3546e7b51e | ||
|   | 5e7c3ed46a | ||
|   | 13ec1aafa0 | ||
|   | f521bce9e6 | ||
|   | c78209604c | ||
|   | 8fe4cfecb6 | ||
|   | a5a2df4956 | ||
|   | 2fa5e4679f | ||
|   | 57af984e68 | ||
|   | 442e840a53 | ||
|   | 3c33f7d294 | ||
|   | 42a66ad49e | ||
|   | 2d1d70b3b6 | ||
|   | c9217a419a | ||
|   | a180395832 | ||
|   | 3dfcc6b0be | ||
|   | cb1df5217e | ||
|   | 24ef80351c | ||
|   | bb878a1ccf | ||
|   | 4daea7d7e6 | ||
|   | 3b20747192 | ||
|   | 403e30feba | ||
|   | f58c73b7f1 | ||
|   | 2a8477cbda | ||
|   | f5bee7b691 | ||
|   | 8c077a7373 | ||
|   | 4e07b51460 | ||
|   | 44294e1a88 | ||
|   | 25a0a68cde | ||
|   | 3e259021d0 | ||
|   | f760a9d0c2 | ||
|   | f69facc842 | ||
|   | e17638bc06 | ||
|   | 399c0d337a | ||
|   | 856eb479e4 | ||
|   | 1c7de1d668 | ||
|   | 8a8f24f93e | ||
|   | e76dba0f84 | ||
|   | aababe1a87 | ||
|   | 436b0624e7 | ||
|   | 0a37d1c15c | ||
|   | 793269731d | ||
|   | b69a4fe8b5 | ||
|   | 665d84f40a | ||
|   | 4734b390a5 | ||
|   | 50d0721c39 | ||
|   | 9079f15f52 | ||
|   | 60b460d594 | ||
|   | 98f42d9b3b | ||
|   | 23adcb544b | ||
|   | e6b24d2e3c | ||
|   | ea3e736a14 | ||
|   | a5c39b829a | ||
|   | 1ec333ee5a | ||
|   | bbae93aa16 | ||
|   | be1dcb7264 | ||
|   | 4a1e6dcc32 | ||
|   | f644a4ea78 | ||
|   | 85b7405963 | ||
|   | c854f436bf | ||
|   | e5be8b7f67 | ||
|   | 906ae730e9 | ||
|   | 92df7747b2 | ||
|   | 0ee8f5efe3 | ||
|   | 4b5b0b065d | ||
|   | 15cf8d2a6d | ||
|   | ef0ba9483f | ||
|   | 70500cf21e | ||
|   | a7da6cf172 | ||
|   | ae76ae4025 | ||
|   | 9614ec4c6a | ||
|   | c4e90b810d | ||
|   | 887ce3377e | ||
|   | 6ef47249ab | ||
|   | 3a0df56605 | ||
|   | 98cdee7f03 | ||
|   | b3e2a6a860 | ||
|   | 55410f026b | ||
|   | f2611f64ac | ||
|   | d788bd8323 | ||
|   | 9eb108f13e | ||
|   | eebd64bedb | ||
|   | 21504f1329 | ||
|   | ff6bae936d | ||
|   | 62523c815e | ||
|   | 0f5465c5da | ||
|   | e4cba70008 | ||
|   | 692b993eee | ||
|   | 35e3a479cd | ||
|   | bb7ff27d04 | ||
|   | 0acc5e33b3 | ||
|   | cb5187fd8d | ||
|   | 160c6e6554 | ||
|   | a173179b03 | ||
|   | e73497e4b7 | ||
|   | 835ef01a70 | ||
|   | a1335aecfb | ||
|   | c553312fd5 | ||
|   | 3adc7ca22a | ||
|   | 441e603bc0 | ||
|   | 7511df61b3 | ||
|   | 91d3d2ad1f | ||
|   | 6692b618ea | ||
|   | 2052149dc1 | ||
|   | 7b8237afae | ||
|   | 859a984ec8 | ||
|   | 89932b325d | ||
|   | dac85757b3 | ||
|   | 3b0cec9db6 | ||
|   | 17749bb14a | ||
|   | c56dd4172e | ||
|   | d2335485f2 | ||
|   | cf69dd644a | ||
|   | 8df6af62d7 | ||
|   | 3c3bb70b01 | ||
|   | d8a4eaf026 | ||
|   | 2402010d24 | ||
|   | 16c804106a | ||
|   | b1ef9361f3 | ||
|   | 766a26128d | ||
|   | 5b2dce6cf6 | ||
|   | bee9be534c | ||
|   | 4b49331d97 | ||
|   | f9513ca802 | ||
|   | 3de13a4d9e | ||
|   | 8a7df954e5 | ||
|   | 3706b53e65 | ||
|   | 8a8aaf3297 | ||
|   | 41a5639711 | ||
|   | 5d8f9f1a5a | ||
|   | 5124cd4b77 | ||
|   | 0cbf66996f | ||
|   | e922fdc5d0 | ||
|   | 0addbaa9a8 | ||
|   | 8176fb7bad | ||
|   | baae3592d3 | ||
|   | 6a40e18193 | ||
|   | 2cdb6b811f | ||
|   | 8a8aa1337b | ||
|   | 3fe5647a15 | ||
|   | fec1245811 | ||
|   | ccab6eb7c4 | ||
|   | c9f6e2e257 | ||
|   | f0d3a4e4b7 | ||
|   | 41295e0c4d | ||
|   | 2abd0265c8 | ||
|   | 1e09ccb4d9 | ||
|   | 11e1d04dd1 | ||
|   | f140f5f14b | ||
|   | 5898534c23 | ||
|   | 7836336689 | ||
|   | f96865c2cb | ||
|   | e475893fd7 | ||
|   | 75a37adcd1 | ||
|   | c3b1070b83 | ||
|   | 339ca7accf | ||
|   | 0b02e8116c | ||
|   | 8f973661f4 | ||
|   | c5a73a5c19 | ||
|   | 6a90340b14 | ||
|   | 46abbfe224 | ||
|   | 145d4e4bd5 | ||
|   | b3ba79a3ba | ||
|   | c69db035ee | ||
|   | 60a7eaf2bb | ||
|   | 3f43567c8f | ||
|   | e690f6d487 | ||
|   | 3d4b4e04c5 | ||
|   | 62dd8f35c0 | ||
|   | 1468dfd6b6 | ||
|   | 40e92721c1 | ||
|   | 204e940dcb | ||
|   | 98aa9bd3fe | ||
|   | 041531e96d | ||
|   | c2a188f7fe | ||
|   | 1a1d37a2d0 | ||
|   | 214649ec20 | ||
|   | e3866eeb29 | ||
|   | 20db216275 | ||
|   | f404fe0570 | ||
|   | bef4361736 | ||
|   | aa991b62f4 | ||
|   | 8dfe0f4373 | ||
|   | ffedb79670 | ||
|   | 0e23935455 | ||
|   | 4f62320e7b | ||
|   | aee3bd3a80 | ||
|   | c992b89b2f | ||
|   | fc5c9647d8 | ||
|   | 3a238e9d4b | ||
|   | 9d9fea49ca | ||
|   | e21131d67e | ||
|   | 1f02d0f6d0 | ||
|   | 830fde8007 | ||
|   | c44ce77e95 | ||
|   | ab318ef99e | ||
|   | c86c2661af | ||
|   | dabb222511 | ||
|   | ef13b3a36c | ||
|   | 6fb9081394 | ||
|   | 1ba38b3902 | ||
|   | dc06a132bc | ||
|   | 644b4f88ac | ||
|   | c97197b61a | ||
|   | 3e97d29bcf | ||
|   | a5ea214553 | ||
|   | 91c6ae229e | ||
|   | e18f4c843a | ||
|   | 0f103d5853 | ||
|   | 56f10e238b | ||
|   | 5baa2e9069 | ||
|   | 7bf83371d5 | ||
|   | 36c575023e | ||
|   | 7eadc74f6c | ||
|   | 3ad06c406c | ||
|   | c68e37a8c4 | ||
|   | e66496eae7 | ||
|   | e6b951c62a | ||
|   | 5279226f36 | ||
|   | 31b552ab51 | ||
|   | f5e53cd60f | ||
|   | 4a48f59d27 | ||
|   | bc2c63bf1f | ||
|   | b56a757f2e | ||
|   | 4692ed4b4a | ||
|   | 615bbcae74 | ||
|   | 7737c6aee1 | ||
|   | f7c0499158 | ||
|   | 9ebcefee00 | ||
|   | b18b5c4f43 | ||
|   | 4752b0772f | ||
|   | 957e319649 | ||
|   | a8978a0d4d | ||
|   | 10712c5ec0 | ||
|   | 83c39f57f0 | ||
|   | 173757cfa2 | ||
|   | c6be73dba2 | ||
|   | ccf293906a | ||
|   | 0f4c0b95e2 | ||
|   | 82973e7608 | ||
|   | c011bccc45 | ||
|   | 8473caf5a6 | ||
|   | 85b038525b | ||
|   | 51a5c3c664 | ||
|   | d6cda9df0a | ||
|   | ca7d09d1cb | ||
|   | 4ab478c49c | ||
|   | 1a1c1fd0da | ||
|   | 370951ab67 | ||
|   | a0632a572a | ||
|   | 10601e7760 | ||
|   | 088ce9c2ad | ||
|   | e1a69b97db | ||
|   | a2fd45bb95 | ||
|   | 01ddd8eaa8 | ||
|   | 22fa57b82c | ||
|   | 92a51ca546 | ||
|   | 6a9234e634 | ||
|   | e8d062a95a | ||
|   | 3394d64f6c | ||
|   | 0fd5a277ed | ||
|   | 8eef2818fa | ||
|   | a15703d5af | ||
|   | 34d8165edd | ||
|   | 1759add2b6 | ||
|   | dd80f1b997 | ||
|   | 90ff602ecd | ||
|   | 0099ff1321 | 
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +1,20 @@ | ||||
| obj/ | ||||
| libs/ | ||||
| out | ||||
| *.zip | ||||
| *.jks | ||||
| *.apk | ||||
| config.prop | ||||
|  | ||||
| # Copied binaries | ||||
| ziptools/zipadjust | ||||
| # Manually dumped jars | ||||
| snet/libs | ||||
|  | ||||
| # Built binaries | ||||
| native/out | ||||
|  | ||||
| # Android Studio / Gradle | ||||
| *.iml | ||||
| .gradle | ||||
| /local.properties | ||||
| /.idea | ||||
| /build | ||||
| /captures | ||||
| .externalNativeBuild | ||||
|   | ||||
							
								
								
									
										35
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +1,21 @@ | ||||
| [submodule "jni/selinux"] | ||||
| 	path = jni/selinux | ||||
| [submodule "selinux"] | ||||
| 	path = native/jni/external/selinux | ||||
| 	url = https://github.com/topjohnwu/selinux.git | ||||
| [submodule "jni/su"] | ||||
| 	path = jni/su | ||||
| 	url = https://github.com/topjohnwu/MagiskSU.git | ||||
| [submodule "jni/ndk-compression"] | ||||
| 	path = jni/ndk-compression | ||||
| 	url = https://github.com/topjohnwu/ndk-compression.git | ||||
| [submodule "jni/magiskpolicy"] | ||||
| 	path = jni/magiskpolicy | ||||
| 	url = https://github.com/topjohnwu/magiskpolicy.git | ||||
| [submodule "MagiskManager"] | ||||
| 	path = MagiskManager | ||||
| 	url = https://github.com/topjohnwu/MagiskManager.git | ||||
| [submodule "jni/busybox"] | ||||
| 	path = jni/busybox | ||||
| [submodule "busybox"] | ||||
| 	path = native/jni/external/busybox | ||||
| 	url = https://github.com/topjohnwu/ndk-busybox.git | ||||
| [submodule "dtc"] | ||||
| 	path = native/jni/external/dtc | ||||
| 	url = https://github.com/dgibson/dtc | ||||
| [submodule "lz4"] | ||||
| 	path = native/jni/external/lz4 | ||||
| 	url = https://github.com/lz4/lz4.git | ||||
| [submodule "bzip2"] | ||||
| 	path = native/jni/external/bzip2 | ||||
| 	url = https://github.com/nemequ/bzip2.git | ||||
| [submodule "xz"] | ||||
| 	path = native/jni/external/xz | ||||
| 	url = https://github.com/xz-mirror/xz.git | ||||
| [submodule "nanopb"] | ||||
| 	path = native/jni/external/nanopb | ||||
| 	url = https://github.com/nanopb/nanopb.git | ||||
|   | ||||
 Submodule MagiskManager deleted from b362c0ef38
									
								
							
							
								
								
									
										92
									
								
								README.MD
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								README.MD
									
									
									
									
									
								
							| @@ -1,35 +1,32 @@ | ||||
| # Magisk | ||||
| [XDA Announcement Thread](https://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445) | ||||
|  | ||||
| ## How to build Magisk | ||||
| ## Building Environment Requirements | ||||
| 1. Python 3.5+: 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 | ||||
|  | ||||
| #### Building has been tested on 3 major platforms: | ||||
| ## 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). | ||||
|  | ||||
| **macOS 10.12**   | ||||
| **Ubuntu 17.04 x64**   | ||||
| **Windows 10 x64** | ||||
| ## 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!** Please **DO NOT** report bugs that is already fixed upstream. | ||||
|  | ||||
| #### Environment Requirements | ||||
|  | ||||
| 1. A 64-bit machine: `cmake` for Android is only available in 64-bit | ||||
| 2. Python 3.5+: to run the build script | ||||
| 3. Java Development Kit (JDK) 8: To compile Magisk Manager and sign zips | ||||
| 4. C compiler (Unix only): To build `zipadjust`. Windows users can use the pre-built `zipadjust.exe` | ||||
| 5. Android SDK: `ANDROID_HOME` environment variable should point to the Android SDK folder | ||||
| 6. Android NDK: Install NDK via `sdkmanager`, or via Android SDK Manager in Android Studio | ||||
|  | ||||
| #### Instructions and Notes | ||||
|  | ||||
| 1. The easiest way to setup a working environment is to open Magisk Manager with Android Studio. The IDE will download required components and construct the environment for you. Don't forget to set `ANDROID_HOME` environment variable to the SDK path. | ||||
| 2. Windows users: while installing Python 3 on Windows, allow the installer to add Python to `PATH`, or you'll have to add it manually afterwards. By default, the Python executable is setup as `python`, not `python3` like most Unix environment. If you have both Python 2 and Python 3 installed, you'll have to deal with the executable name and `PATH` yourself. To double check the Python version, call `python --version`. | ||||
| 3. To run the script, on Windows call `python build.py [args...]`; on Unix call `python3 build.py [args...]`, or simply `./build.py [args...]`. To see the built-in help message, call the script with `-h` as an argument. The `-h` option also works for each supported actions to see the help message for the specific action. | ||||
| 4. By default, the script will build binaries and Magisk Manager in debug mode, which will enable verbose debugging messages. If you want to build Magisk Manager in release mode (through the flag `--release`), you will need to place your Java Keystore file in `release_signature.jks` to sign Magisk Manager's APK. For more information, check out [Google's Official Documentation](https://developer.android.com/studio/publish/app-signing.html#signing-manually). | ||||
| 5. The python build script uses ANSI color codes to change the color of the terminal output. For Windows, this **only** works on Windows 10, as previous Windows console do not support them. If you use an older Windows version, a quick Google search should provide many workarounds. | ||||
| 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. | ||||
|  | ||||
| ## Documentation | ||||
| [Link to Documentation](docs/README.MD) | ||||
|  | ||||
| ## License | ||||
|  | ||||
| ``` | ||||
| Magisk, including all subprojects (git submodule) is free software: | ||||
| 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. | ||||
| @@ -42,54 +39,3 @@ 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/>. | ||||
| ``` | ||||
|  | ||||
| ## Credits | ||||
|  | ||||
| **MagiskManager** (`MagiskManager`) | ||||
|  | ||||
| * Copyright 2016-2017, John Wu (@topjohnwu) | ||||
| * All contributors and translators | ||||
|  | ||||
| **MagiskSU** (`jni/su`) | ||||
|  | ||||
| * Copyright 2016-2017, John Wu (@topjohnwu) | ||||
| * Copyright 2015, Pierre-Hugues Husson (phh@phh.me) | ||||
| * Copyright 2013, Koushik Dutta (@koush) | ||||
| * Copyright 2010, Adam Shanks (@ChainsDD) | ||||
| * Copyright 2008, Zinx Verituse (@zinxv) | ||||
|  | ||||
| **MagiskPolicy** (`jni/magiskpolicy`) | ||||
|  | ||||
| * Copyright 2016-2017, John Wu (@topjohnwu) | ||||
| * Copyright 2015, Pierre-Hugues Husson (phh@phh.me) | ||||
| * Copyright 2015, Joshua Brindle (@joshua_brindle) | ||||
|  | ||||
| **MagiskHide** (`jni/magiskhide`) | ||||
|  | ||||
| * Copyright 2016-2017, John Wu (@topjohnwu) | ||||
| * Copyright 2016, Pierre-Hugues Husson (phh@phh.me) (original hidesu) | ||||
|  | ||||
| **resetprop** (`jni/resetprop`) | ||||
|  | ||||
|  * Copyright 2016-2017 John Wu (@topjohnwu) | ||||
|  * Copyright 2016 nkk71 (nkk71x@gmail.com) | ||||
|  | ||||
| **SELinux** (`jni/selinux`) | ||||
|  | ||||
| * Makefile for NDK: Copyright 2016-2017, John Wu (@topjohnwu) | ||||
| * Maintained by many developers in SELinux project | ||||
|  | ||||
| **ndk-compression** (`jni/ndk-compression`) | ||||
|  | ||||
| * Makefile for NDK: Copyright 2017, John Wu (@topjohnwu) | ||||
| * Each library has its own copyright message in corresponding directories | ||||
|  | ||||
| **ndk-busybox** (`jni/busybox`) | ||||
|  | ||||
| * Makefile for NDK, generated by [ndk-busybox-kitchen](https://github.com/topjohnwu/ndk-busybox-kitchen): Copyright 2017, John Wu (@topjohnwu) | ||||
| * Patches for NDK: Many contributors along the way, all placed in [osm0sis/android-busybox-ndk](https://github.com/osm0sis/android-busybox-ndk) | ||||
| * The copyright message for busybox should be included in its own directory | ||||
|  | ||||
| **Others Not Mentioned** | ||||
|  | ||||
| * Copyright 2016-2017, John Wu (@topjohnwu) | ||||
|   | ||||
							
								
								
									
										12
									
								
								app/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								app/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| *.iml | ||||
| .gradle | ||||
| /local.properties | ||||
| .idea/ | ||||
| /build | ||||
| app/release | ||||
| *.hprof | ||||
| .externalNativeBuild/ | ||||
| src/full/res/raw/util_functions.sh | ||||
| public.certificate.x509.pem | ||||
| private.key.pk8 | ||||
| *.apk | ||||
							
								
								
									
										7
									
								
								app/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # 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. | ||||
							
								
								
									
										82
									
								
								app/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								app/build.gradle
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| apply plugin: 'com.android.application' | ||||
|  | ||||
| def configProps = new Properties() | ||||
| def configPath = project.hasProperty('configPath') ? project.configPath : rootProject.file('config.prop') | ||||
| configProps.load(new FileInputStream(configPath)) | ||||
|  | ||||
| android { | ||||
|     compileSdkVersion rootProject.ext.compileSdkVersion | ||||
|     buildToolsVersion rootProject.ext.buildToolsVersion | ||||
|  | ||||
|     defaultConfig { | ||||
|         applicationId "com.topjohnwu.magisk" | ||||
|         minSdkVersion 21 | ||||
|         targetSdkVersion rootProject.ext.compileSdkVersion | ||||
|     } | ||||
|  | ||||
|     signingConfigs { | ||||
|         config { | ||||
|             storeFile rootProject.file('release-key.jks') | ||||
|             storePassword configProps['keyStorePass'] | ||||
|             keyAlias configProps['keyAlias'] | ||||
|             keyPassword configProps['keyPass'] | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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" | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     compileOptions { | ||||
|         sourceCompatibility JavaVersion.VERSION_1_8 | ||||
|         targetCompatibility JavaVersion.VERSION_1_8 | ||||
|     } | ||||
|     dexOptions { | ||||
|         preDexLibraries true | ||||
|         javaMaxHeapSize "2g" | ||||
|     } | ||||
|     lintOptions { | ||||
|         disable 'MissingTranslation' | ||||
|     } | ||||
| } | ||||
|  | ||||
| dependencies { | ||||
|     implementation fileTree(include: ['*.jar'], dir: 'libs') | ||||
|     fullImplementation project(':utils') | ||||
|     implementation "androidx.core:core:${rootProject.ext.androidXVersion}" | ||||
|     fullImplementation "androidx.preference:preference:${rootProject.ext.androidXVersion}" | ||||
|     fullImplementation "androidx.recyclerview:recyclerview:${rootProject.ext.androidXVersion}" | ||||
|     fullImplementation "androidx.cardview:cardview:${rootProject.ext.androidXVersion}" | ||||
|     fullImplementation "com.google.android.material:material:${rootProject.ext.androidXVersion}" | ||||
|     fullImplementation 'com.github.topjohnwu:libsu:2.0.2' | ||||
|     fullImplementation 'com.atlassian.commonmark:commonmark:0.11.0' | ||||
|     fullImplementation 'org.kamranzafar:jtar:2.3' | ||||
| } | ||||
							
								
								
									
										35
									
								
								app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								app/proguard-rules.pro
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| # Add project specific ProGuard rules here. | ||||
| # By default, the flags in this file are appended to flags specified | ||||
| # in /Users/topjohnwu/Library/Android/sdk/tools/proguard/proguard-android.txt | ||||
| # You can edit the include path and order by changing the proguardFiles | ||||
| # directive in build.gradle. | ||||
| # | ||||
| # For more details, see | ||||
| #   http://developer.android.com/guide/developing/tools/proguard.html | ||||
|  | ||||
| # Add any project specific keep options here: | ||||
|  | ||||
| # If your project uses WebView with JS, uncomment the following | ||||
| # and specify the fully qualified class name to the JavaScript interface | ||||
| # class: | ||||
| #-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||||
| #   public *; | ||||
| #} | ||||
|  | ||||
| # BouncyCastle | ||||
| -keep class org.bouncycastle.jcajce.provider.asymmetric.rsa.**SHA1** { *; } | ||||
| -keep class org.bouncycastle.jcajce.provider.asymmetric.RSA** { *; } | ||||
| -keep class org.bouncycastle.jcajce.provider.digest.SHA1** { *; } | ||||
| -dontwarn javax.naming.** | ||||
|  | ||||
| # Snet extention | ||||
| -keepclassmembers class com.topjohnwu.magisk.utils.ISafetyNetHelper { *; } | ||||
|  | ||||
| # Strip logging | ||||
| -assumenosideeffects class com.topjohnwu.magisk.utils.Logger { | ||||
|   public *** debug(...); | ||||
| } | ||||
|  | ||||
| # Excessive obfuscation | ||||
| -repackageclasses 'a' | ||||
| -allowaccessmodification | ||||
							
								
								
									
										105
									
								
								app/src/full/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								app/src/full/AndroidManifest.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| <?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" /> | ||||
|     <uses-permission android:name="android.permission.USE_FINGERPRINT" /> | ||||
|     <uses-permission android:name="android.permission.WAKE_LOCK" /> | ||||
|  | ||||
|     <application | ||||
|         android:name="a.q" | ||||
|         android:theme="@style/AppTheme" | ||||
|         tools:ignore="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.d" | ||||
|             android:theme="@style/AppTheme.StatusBar" /> | ||||
|         <activity | ||||
|             android:name="a.e" | ||||
|             android:theme="@style/AppTheme.StatusBar"/> | ||||
|         <activity | ||||
|             android:name="a.f" | ||||
|             android:configChanges="keyboardHidden|orientation|screenSize" | ||||
|             android:screenOrientation="nosensor" | ||||
|             android:theme="@style/AppTheme.StatusBar" /> | ||||
|         <activity | ||||
|             android:name="a.g" | ||||
|             android:theme="@style/AppTheme.Translucent" /> | ||||
|  | ||||
|         <!-- Superuser --> | ||||
|  | ||||
|         <activity | ||||
|             android:name="a.p" | ||||
|             android:excludeFromRecents="true" | ||||
|             android:launchMode="singleTask" | ||||
|             android:taskAffinity="internal.superuser" | ||||
|             android:theme="@style/SuRequest" /> | ||||
|  | ||||
|         <activity | ||||
|             android:name=".superuser.RequestActivity" | ||||
|             android:excludeFromRecents="true" | ||||
|             android:launchMode="singleTask" | ||||
|             android:taskAffinity="internal.superuser" | ||||
|             android:theme="@style/AppTheme.Translucent" /> | ||||
|  | ||||
|         <receiver android:name=".superuser.SuReceiver" /> | ||||
|  | ||||
|         <!-- Receiver --> | ||||
|  | ||||
|         <receiver android:name="a.h"> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.BOOT_COMPLETED" /> | ||||
|             </intent-filter> | ||||
|         </receiver> | ||||
|         <receiver android:name="a.i"> | ||||
|             <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> | ||||
|         <receiver android:name="a.j" /> | ||||
|         <receiver android:name="a.k" /> | ||||
|         <receiver android:name="a.l"> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.LOCALE_CHANGED" /> | ||||
|             </intent-filter> | ||||
|         </receiver> | ||||
|  | ||||
|         <!-- Service --> | ||||
|  | ||||
|         <service | ||||
|             android:name="a.m" | ||||
|             android:exported="true" | ||||
|             android:permission="android.permission.BIND_JOB_SERVICE" /> | ||||
|         <service | ||||
|             android:name="a.n" | ||||
|             android:exported="true" | ||||
|             android:permission="android.permission.BIND_JOB_SERVICE" /> | ||||
|  | ||||
|         <!-- Hardcode GMS version --> | ||||
|         <meta-data | ||||
|             android:name="com.google.android.gms.version" | ||||
|             android:value="12451000" /> | ||||
|  | ||||
|     </application> | ||||
|  | ||||
| </manifest> | ||||
							
								
								
									
										10
									
								
								app/src/full/java/a/a.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/full/java/a/a.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.utils.BootSigner; | ||||
|  | ||||
| import androidx.annotation.Keep; | ||||
|  | ||||
| @Keep | ||||
| public class a extends BootSigner { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/b.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/b.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.MainActivity; | ||||
|  | ||||
| public class b extends MainActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/c.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/c.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.SplashActivity; | ||||
|  | ||||
| public class c extends SplashActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/d.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/d.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.AboutActivity; | ||||
|  | ||||
| public class d extends AboutActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/e.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/e.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.DonationActivity; | ||||
|  | ||||
| public class e extends DonationActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/f.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/f.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.FlashActivity; | ||||
|  | ||||
| public class f extends FlashActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/h.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/h.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.receivers.BootReceiver; | ||||
|  | ||||
| public class h extends BootReceiver { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/i.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/i.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.receivers.PackageReceiver; | ||||
|  | ||||
| public class i extends PackageReceiver { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/j.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/j.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.receivers.ManagerUpdate; | ||||
|  | ||||
| public class j extends ManagerUpdate { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/k.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/k.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.receivers.RebootReceiver; | ||||
|  | ||||
| public class k extends RebootReceiver { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/l.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/l.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.receivers.ShortcutReceiver; | ||||
|  | ||||
| public class l extends ShortcutReceiver { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/m.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/m.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.services.OnBootService; | ||||
|  | ||||
| public class m extends OnBootService { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/n.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/n.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.services.UpdateCheckService; | ||||
|  | ||||
| public class n extends UpdateCheckService { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										22
									
								
								app/src/full/java/a/o.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								app/src/full/java/a/o.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package a; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
|  | ||||
| import com.topjohnwu.magisk.components.AboutCardRow; | ||||
|  | ||||
| public class o extends AboutCardRow { | ||||
|     /* stub */ | ||||
|  | ||||
|     public o(Context context) { | ||||
|         super(context); | ||||
|     } | ||||
|  | ||||
|     public o(Context context, AttributeSet attrs) { | ||||
|         super(context, attrs); | ||||
|     } | ||||
|  | ||||
|     public o(Context context, AttributeSet attrs, int defStyleAttr) { | ||||
|         super(context, attrs, defStyleAttr); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/p.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/p.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.SuRequestActivity; | ||||
|  | ||||
| public class p extends SuRequestActivity { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										7
									
								
								app/src/full/java/a/q.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/src/full/java/a/q.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package a; | ||||
|  | ||||
| import com.topjohnwu.magisk.MagiskManager; | ||||
|  | ||||
| public class q extends MagiskManager { | ||||
|     /* stub */ | ||||
| } | ||||
							
								
								
									
										71
									
								
								app/src/full/java/com/topjohnwu/magisk/AboutActivity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								app/src/full/java/com/topjohnwu/magisk/AboutActivity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.text.TextUtils; | ||||
| import android.view.View; | ||||
|  | ||||
| import com.topjohnwu.magisk.asyncs.MarkDownWindow; | ||||
| import com.topjohnwu.magisk.components.AboutCardRow; | ||||
| import com.topjohnwu.magisk.components.BaseActivity; | ||||
| import com.topjohnwu.magisk.utils.Utils; | ||||
|  | ||||
| import java.util.Locale; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
|  | ||||
| public class AboutActivity extends BaseActivity { | ||||
|  | ||||
|     Toolbar toolbar; | ||||
|     AboutCardRow appVersionInfo; | ||||
|     AboutCardRow appChangelog; | ||||
|     AboutCardRow appTranslators; | ||||
|     AboutCardRow appSourceCode; | ||||
|     AboutCardRow supportThread; | ||||
|     AboutCardRow twitter; | ||||
|  | ||||
|     @Override | ||||
|     public int getDarkTheme() { | ||||
|         return R.style.AppTheme_StatusBar_Dark; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_about); | ||||
|         ViewBinder.bind(this); | ||||
|  | ||||
|         setSupportActionBar(toolbar); | ||||
|         toolbar.setNavigationOnClickListener(view -> finish()); | ||||
|  | ||||
|         ActionBar ab = getSupportActionBar(); | ||||
|         if (ab != null) { | ||||
|             ab.setTitle(R.string.about); | ||||
|             ab.setDisplayHomeAsUpEnabled(true); | ||||
|         } | ||||
|  | ||||
|         appVersionInfo.setSummary(String.format(Locale.US, "%s (%d) (%s)", | ||||
|                 BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, getPackageName())); | ||||
|  | ||||
|         appChangelog.setOnClickListener(v -> { | ||||
|             new MarkDownWindow(this, getString(R.string.app_changelog), | ||||
|                     getResources().openRawResource(R.raw.changelog)).exec(); | ||||
|         }); | ||||
|  | ||||
|         String translators = getString(R.string.translators); | ||||
|         if (TextUtils.isEmpty(translators)) { | ||||
|             appTranslators.setVisibility(View.GONE); | ||||
|         } else { | ||||
|             appTranslators.setSummary(translators); | ||||
|         } | ||||
|  | ||||
|         appSourceCode.setOnClickListener(v -> Utils.openLink(this, Uri.parse(Const.Url.SOURCE_CODE_URL))); | ||||
|         supportThread.setOnClickListener(v -> Utils.openLink(this, Uri.parse(Const.Url.XDA_THREAD))); | ||||
|         twitter.setOnClickListener(v -> Utils.openLink(this, Uri.parse(Const.Url.TWITTER_URL))); | ||||
|  | ||||
|         setFloating(); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										156
									
								
								app/src/full/java/com/topjohnwu/magisk/Const.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								app/src/full/java/com/topjohnwu/magisk/Const.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,156 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.os.Process; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| public class Const { | ||||
|  | ||||
|     public static final String DEBUG_TAG = "MagiskManager"; | ||||
|     public static final String ORIG_PKG_NAME = BuildConfig.APPLICATION_ID; | ||||
|     public static final String MAGISKHIDE_PROP = "persist.magisk.hide"; | ||||
|  | ||||
|     // APK content | ||||
|     public static final String ANDROID_MANIFEST = "AndroidManifest.xml"; | ||||
|  | ||||
|     public static final String SU_KEYSTORE_KEY = "su_key"; | ||||
|  | ||||
|     // Paths | ||||
|     public static File MAGISK_PATH; | ||||
|     public static File MAGISK_DISABLE_FILE; | ||||
|     public static File MAGISK_HOST_FILE; | ||||
|  | ||||
|     static { | ||||
|         /* Prevent crashing on unrooted devices */ | ||||
|         MAGISK_PATH = MAGISK_DISABLE_FILE = MAGISK_HOST_FILE = new File("xxx"); | ||||
|     } | ||||
|  | ||||
|     public static final String BUSYBOX_PATH = "/sbin/.core/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 int MIN_MODULE_VER() { | ||||
|         return Data.magiskVersionCode >= MAGISK_VER.REMOVE_LEGACY_LINK ? 1500 : 1400; | ||||
|     } | ||||
|  | ||||
|     /* A list of apps that should not be shown as hide-able */ | ||||
|     public static final List<String> HIDE_BLACKLIST =  Arrays.asList( | ||||
|             "android", | ||||
|             Data.MM().getPackageName(), | ||||
|             "com.google.android.gms" | ||||
|     ); | ||||
|  | ||||
|     public static final int USER_ID = Process.myUid() / 100000; | ||||
|  | ||||
|     public static final class MAGISK_VER { | ||||
|         public static final int UNIFIED = 1300; | ||||
|         public static final int FBE_AWARE = 1410; | ||||
|         public static final int RESETPROP_PERSIST = 1436; | ||||
|         public static final int MANAGER_HIDE = 1440; | ||||
|         public static final int HIDDEN_PATH = 1460; | ||||
|         public static final int REMOVE_LEGACY_LINK = 1630; | ||||
|         public static final int SEPOL_REFACTOR = 1640; | ||||
|         public static final int FIX_ENV = 1650; | ||||
|         public static final int DBVER_SIX = 17000; | ||||
|     } | ||||
|  | ||||
|     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; | ||||
|         public static final int APK_UPDATE_NOTIFICATION_ID = 5; | ||||
|         public static final int DTBO_NOTIFICATION_ID = 7; | ||||
|         public static final String NOTIFICATION_CHANNEL = "magisk_notification"; | ||||
|     } | ||||
|  | ||||
|     public static class Url { | ||||
|         public static final String STABLE_URL = "https://raw.githubusercontent.com/topjohnwu/magisk_files/master/stable.json"; | ||||
|         public static final String BETA_URL = "https://raw.githubusercontent.com/topjohnwu/magisk_files/master/beta.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 PAYPAL_URL = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CC7FZ7526MNGG"; | ||||
|         public static final String PATREON_URL = "https://www.patreon.com/topjohnwu"; | ||||
|         public static final String TWITTER_URL = "https://twitter.com/topjohnwu"; | ||||
|         public static final String XDA_THREAD = "http://forum.xda-developers.com/showthread.php?t=3432382"; | ||||
|         public static final String SOURCE_CODE_URL = "https://github.com/topjohnwu/Magisk"; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public static class Key { | ||||
|         // su | ||||
|         public static final String ROOT_ACCESS = "root_access"; | ||||
|         public static final String SU_MULTIUSER_MODE = "multiuser_mode"; | ||||
|         public static final String SU_MNT_NS = "mnt_ns"; | ||||
|         public static final String SU_MANAGER = "requester"; | ||||
|         public static final String SU_REQUEST_TIMEOUT = "su_request_timeout"; | ||||
|         public static final String SU_AUTO_RESPONSE = "su_auto_response"; | ||||
|         public static final String SU_NOTIFICATION = "su_notification"; | ||||
|         public static final String SU_REAUTH = "su_reauth"; | ||||
|         public static final String SU_FINGERPRINT = "su_fingerprint"; | ||||
|  | ||||
|         // intents | ||||
|         public static final String OPEN_SECTION = "section"; | ||||
|         public static final String INTENT_SET_FILENAME = "filename"; | ||||
|         public static final String INTENT_SET_LINK = "link"; | ||||
|         public static final String FLASH_ACTION = "action"; | ||||
|         public static final String FLASH_SET_BOOT = "boot"; | ||||
|  | ||||
|         // others | ||||
|         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 APP_VER = "app_version"; | ||||
|         public static final String MAGISKHIDE = "magiskhide"; | ||||
|         public static final String HOSTS = "hosts"; | ||||
|         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 LINK_KEY = "Link"; | ||||
|         public static final String IF_NONE_MATCH = "If-None-Match"; | ||||
|         public static final String REPO_ORDER = "repo_order"; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     public static class Value { | ||||
|         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 ROOT_ACCESS_DISABLED = 0; | ||||
|         public static final int ROOT_ACCESS_APPS_ONLY = 1; | ||||
|         public static final int ROOT_ACCESS_ADB_ONLY = 2; | ||||
|         public static final int ROOT_ACCESS_APPS_AND_ADB = 3; | ||||
|         public static final int MULTIUSER_MODE_OWNER_ONLY = 0; | ||||
|         public static final int MULTIUSER_MODE_OWNER_MANAGED = 1; | ||||
|         public static final int MULTIUSER_MODE_USER = 2; | ||||
|         public static final int NAMESPACE_MODE_GLOBAL = 0; | ||||
|         public static final int NAMESPACE_MODE_REQUESTER = 1; | ||||
|         public static final int NAMESPACE_MODE_ISOLATE = 2; | ||||
|         public static final int NO_NOTIFICATION = 0; | ||||
|         public static final int NOTIFICATION_TOAST = 1; | ||||
|         public static final int SU_PROMPT = 0; | ||||
|         public static final int SU_AUTO_DENY = 1; | ||||
|         public static final int SU_AUTO_ALLOW = 2; | ||||
|         public static final String FLASH_ZIP = "flash"; | ||||
|         public static final String PATCH_BOOT = "patch"; | ||||
|         public static final String FLASH_MAGISK = "magisk"; | ||||
|         public static final String FLASH_INACTIVE_SLOT = "slot"; | ||||
|         public static final String UNINSTALL = "uninstall"; | ||||
|         public static final int[] timeoutList = {0, -1, 10, 20, 30, 60}; | ||||
|         public static final int ORDER_NAME = 0; | ||||
|         public static final int ORDER_DATE = 1; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										218
									
								
								app/src/full/java/com/topjohnwu/magisk/Data.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								app/src/full/java/com/topjohnwu/magisk/Data.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,218 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.content.SharedPreferences; | ||||
| import android.os.Handler; | ||||
| import android.os.Looper; | ||||
| import android.util.Xml; | ||||
|  | ||||
| import com.topjohnwu.magisk.components.AboutCardRow; | ||||
| import com.topjohnwu.magisk.receivers.BootReceiver; | ||||
| import com.topjohnwu.magisk.receivers.ManagerUpdate; | ||||
| import com.topjohnwu.magisk.receivers.PackageReceiver; | ||||
| import com.topjohnwu.magisk.receivers.RebootReceiver; | ||||
| import com.topjohnwu.magisk.receivers.ShortcutReceiver; | ||||
| import com.topjohnwu.magisk.services.OnBootService; | ||||
| import com.topjohnwu.magisk.services.UpdateCheckService; | ||||
| import com.topjohnwu.magisk.utils.FingerprintHelper; | ||||
| import com.topjohnwu.magisk.utils.Utils; | ||||
| import com.topjohnwu.superuser.Shell; | ||||
| import com.topjohnwu.superuser.ShellUtils; | ||||
| import com.topjohnwu.superuser.io.SuFile; | ||||
| import com.topjohnwu.superuser.io.SuFileInputStream; | ||||
|  | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
| import org.xmlpull.v1.XmlPullParserException; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.lang.ref.WeakReference; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class Data { | ||||
|     // Global app instance | ||||
|     public static WeakReference<MagiskManager> weakApp; | ||||
|     public static Handler mainHandler = new Handler(Looper.getMainLooper()); | ||||
|     public static Map<Class, Class> classMap = new HashMap<>(); | ||||
|  | ||||
|     // Current status | ||||
|     public static String magiskVersionString; | ||||
|     public static int magiskVersionCode = -1; | ||||
|     public static boolean magiskHide; | ||||
|  | ||||
|     // Update Info | ||||
|     public static String remoteMagiskVersionString; | ||||
|     public static int remoteMagiskVersionCode = -1; | ||||
|     public static String magiskLink; | ||||
|     public static String magiskNoteLink; | ||||
|     public static String magiskMD5; | ||||
|     public static String remoteManagerVersionString; | ||||
|     public static int remoteManagerVersionCode = -1; | ||||
|     public static String managerLink; | ||||
|     public static String managerNoteLink; | ||||
|     public static String uninstallerLink; | ||||
|     public static int snetVersionCode; | ||||
|     public static String snetLink; | ||||
|  | ||||
|     // Install flags | ||||
|     public static boolean keepVerity = false; | ||||
|     public static boolean keepEnc = false; | ||||
|  | ||||
|     // Configs | ||||
|     public static boolean isDarkTheme; | ||||
|     public static int suRequestTimeout; | ||||
|     public static int suLogTimeout = 14; | ||||
|     public static int suAccessState; | ||||
|     public static boolean suFingerprint; | ||||
|     public static int multiuserMode; | ||||
|     public static int suResponseType; | ||||
|     public static int suNotificationType; | ||||
|     public static int suNamespaceMode; | ||||
|     public static int updateChannel; | ||||
|     public static int repoOrder; | ||||
|  | ||||
|     static { | ||||
|         classMap.put(MagiskManager.class, a.q.class); | ||||
|         classMap.put(MainActivity.class, a.b.class); | ||||
|         classMap.put(SplashActivity.class, a.c.class); | ||||
|         classMap.put(AboutActivity.class, a.d.class); | ||||
|         classMap.put(DonationActivity.class, a.e.class); | ||||
|         classMap.put(FlashActivity.class, a.f.class); | ||||
|         classMap.put(NoUIActivity.class, a.g.class); | ||||
|         classMap.put(BootReceiver.class, a.h.class); | ||||
|         classMap.put(PackageReceiver.class, a.i.class); | ||||
|         classMap.put(ManagerUpdate.class, a.j.class); | ||||
|         classMap.put(RebootReceiver.class, a.k.class); | ||||
|         classMap.put(ShortcutReceiver.class, a.l.class); | ||||
|         classMap.put(OnBootService.class, a.m.class); | ||||
|         classMap.put(UpdateCheckService.class, a.n.class); | ||||
|         classMap.put(AboutCardRow.class, a.o.class); | ||||
|         classMap.put(SuRequestActivity.class, a.p.class); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public static void loadMagiskInfo() { | ||||
|         try { | ||||
|             magiskVersionString = ShellUtils.fastCmd("magisk -v").split(":")[0]; | ||||
|             magiskVersionCode = Integer.parseInt(ShellUtils.fastCmd("magisk -V")); | ||||
|             String s = ShellUtils.fastCmd((magiskVersionCode >= Const.MAGISK_VER.RESETPROP_PERSIST ? | ||||
|                     "resetprop -p " : "getprop ") + Const.MAGISKHIDE_PROP); | ||||
|             magiskHide = s.isEmpty() || Integer.parseInt(s) != 0; | ||||
|         } catch (NumberFormatException ignored) {} | ||||
|     } | ||||
|  | ||||
|     public static MagiskManager MM() { | ||||
|         return weakApp.get(); | ||||
|     } | ||||
|  | ||||
|     public static void exportPrefs() { | ||||
|         // Flush prefs to disk | ||||
|         MagiskManager mm = MM(); | ||||
|         mm.prefs.edit().commit(); | ||||
|         File xml = new File(mm.getFilesDir().getParent() + "/shared_prefs", | ||||
|                 mm.getPackageName() + "_preferences.xml"); | ||||
|         Shell.su(Utils.fmt("for usr in /data/user/*; do cat %s > ${usr}/%s; done", xml, Const.MANAGER_CONFIGS)).exec(); | ||||
|     } | ||||
|  | ||||
|     public static void importPrefs() { | ||||
|         MagiskManager mm = MM(); | ||||
|         SuFile config = new SuFile(Utils.fmt("/data/user/%d/%s", Const.USER_ID, Const.MANAGER_CONFIGS)); | ||||
|         if (config.exists()) { | ||||
|             SharedPreferences.Editor editor = mm.prefs.edit(); | ||||
|             try { | ||||
|                 SuFileInputStream is = new SuFileInputStream(config); | ||||
|                 XmlPullParser parser = Xml.newPullParser(); | ||||
|                 parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); | ||||
|                 parser.setInput(is, "UTF-8"); | ||||
|                 parser.nextTag(); | ||||
|                 parser.require(XmlPullParser.START_TAG, null, "map"); | ||||
|                 while (parser.next() != XmlPullParser.END_TAG) { | ||||
|                     if (parser.getEventType() != XmlPullParser.START_TAG) | ||||
|                         continue; | ||||
|                     String key = parser.getAttributeValue(null, "name"); | ||||
|                     String value = parser.getAttributeValue(null, "value"); | ||||
|                     switch (parser.getName()) { | ||||
|                         case "string": | ||||
|                             parser.require(XmlPullParser.START_TAG, null, "string"); | ||||
|                             editor.putString(key, parser.nextText()); | ||||
|                             parser.require(XmlPullParser.END_TAG, null, "string"); | ||||
|                             break; | ||||
|                         case "boolean": | ||||
|                             parser.require(XmlPullParser.START_TAG, null, "boolean"); | ||||
|                             editor.putBoolean(key, Boolean.parseBoolean(value)); | ||||
|                             parser.nextTag(); | ||||
|                             parser.require(XmlPullParser.END_TAG, null, "boolean"); | ||||
|                             break; | ||||
|                         case "int": | ||||
|                             parser.require(XmlPullParser.START_TAG, null, "int"); | ||||
|                             editor.putInt(key, Integer.parseInt(value)); | ||||
|                             parser.nextTag(); | ||||
|                             parser.require(XmlPullParser.END_TAG, null, "int"); | ||||
|                             break; | ||||
|                         case "long": | ||||
|                             parser.require(XmlPullParser.START_TAG, null, "long"); | ||||
|                             editor.putLong(key, Long.parseLong(value)); | ||||
|                             parser.nextTag(); | ||||
|                             parser.require(XmlPullParser.END_TAG, null, "long"); | ||||
|                             break; | ||||
|                         case "float": | ||||
|                             parser.require(XmlPullParser.START_TAG, null, "int"); | ||||
|                             editor.putFloat(key, Float.parseFloat(value)); | ||||
|                             parser.nextTag(); | ||||
|                             parser.require(XmlPullParser.END_TAG, null, "int"); | ||||
|                             break; | ||||
|                         default: | ||||
|                             parser.next(); | ||||
|                     } | ||||
|                 } | ||||
|             } catch (IOException | XmlPullParserException e) { | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
|             editor.remove(Const.Key.ETAG_KEY); | ||||
|             editor.apply(); | ||||
|             loadConfig(); | ||||
|             config.delete(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void loadConfig() { | ||||
|         MagiskManager mm = MM(); | ||||
|         // su | ||||
|         suRequestTimeout = Utils.getPrefsInt(mm.prefs, Const.Key.SU_REQUEST_TIMEOUT, Const.Value.timeoutList[2]); | ||||
|         suResponseType = Utils.getPrefsInt(mm.prefs, Const.Key.SU_AUTO_RESPONSE, Const.Value.SU_PROMPT); | ||||
|         suNotificationType = Utils.getPrefsInt(mm.prefs, Const.Key.SU_NOTIFICATION, Const.Value.NOTIFICATION_TOAST); | ||||
|         suAccessState = mm.mDB.getSettings(Const.Key.ROOT_ACCESS, Const.Value.ROOT_ACCESS_APPS_AND_ADB); | ||||
|         multiuserMode = mm.mDB.getSettings(Const.Key.SU_MULTIUSER_MODE, Const.Value.MULTIUSER_MODE_OWNER_ONLY); | ||||
|         suNamespaceMode = mm.mDB.getSettings(Const.Key.SU_MNT_NS, Const.Value.NAMESPACE_MODE_REQUESTER); | ||||
|         suFingerprint = mm.mDB.getSettings(Const.Key.SU_FINGERPRINT, 0) != 0; | ||||
|         if (suFingerprint && !FingerprintHelper.canUseFingerprint()) { | ||||
|             // User revoked the fingerprint | ||||
|             mm.mDB.setSettings(Const.Key.SU_FINGERPRINT, 0); | ||||
|             suFingerprint = false; | ||||
|         } | ||||
|  | ||||
|         // config | ||||
|         isDarkTheme = mm.prefs.getBoolean(Const.Key.DARK_THEME, false); | ||||
|         updateChannel = Utils.getPrefsInt(mm.prefs, Const.Key.UPDATE_CHANNEL, Const.Value.STABLE_CHANNEL); | ||||
|         repoOrder = mm.prefs.getInt(Const.Key.REPO_ORDER, Const.Value.ORDER_DATE); | ||||
|     } | ||||
|  | ||||
|     public static void writeConfig() { | ||||
|         MM().prefs.edit() | ||||
|                 .putBoolean(Const.Key.DARK_THEME, isDarkTheme) | ||||
|                 .putBoolean(Const.Key.MAGISKHIDE, magiskHide) | ||||
|                 .putBoolean(Const.Key.HOSTS, Const.MAGISK_HOST_FILE.exists()) | ||||
|                 .putBoolean(Const.Key.COREONLY, Const.MAGISK_DISABLE_FILE.exists()) | ||||
|                 .putBoolean(Const.Key.SU_FINGERPRINT, suFingerprint) | ||||
|                 .putString(Const.Key.SU_REQUEST_TIMEOUT, String.valueOf(suRequestTimeout)) | ||||
|                 .putString(Const.Key.SU_AUTO_RESPONSE, String.valueOf(suResponseType)) | ||||
|                 .putString(Const.Key.SU_NOTIFICATION, String.valueOf(suNotificationType)) | ||||
|                 .putString(Const.Key.ROOT_ACCESS, String.valueOf(suAccessState)) | ||||
|                 .putString(Const.Key.SU_MULTIUSER_MODE, String.valueOf(multiuserMode)) | ||||
|                 .putString(Const.Key.SU_MNT_NS, String.valueOf(suNamespaceMode)) | ||||
|                 .putString(Const.Key.UPDATE_CHANNEL, String.valueOf(updateChannel)) | ||||
|                 .putInt(Const.Key.UPDATE_SERVICE_VER, Const.UPDATE_SERVICE_VER) | ||||
|                 .putInt(Const.Key.REPO_ORDER, repoOrder) | ||||
|                 .apply(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										43
									
								
								app/src/full/java/com/topjohnwu/magisk/DonationActivity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/src/full/java/com/topjohnwu/magisk/DonationActivity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
|  | ||||
| import com.topjohnwu.magisk.components.AboutCardRow; | ||||
| import com.topjohnwu.magisk.components.BaseActivity; | ||||
| import com.topjohnwu.magisk.utils.Utils; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
|  | ||||
| public class DonationActivity extends BaseActivity { | ||||
|  | ||||
|     Toolbar toolbar; | ||||
|     AboutCardRow paypal; | ||||
|     AboutCardRow patreon; | ||||
|  | ||||
|     @Override | ||||
|     public int getDarkTheme() { | ||||
|         return R.style.AppTheme_StatusBar_Dark; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_donation); | ||||
|         ViewBinder.bind(this); | ||||
|  | ||||
|         setSupportActionBar(toolbar); | ||||
|         toolbar.setNavigationOnClickListener(view -> finish()); | ||||
|  | ||||
|         ActionBar ab = getSupportActionBar(); | ||||
|         if (ab != null) { | ||||
|             ab.setTitle(R.string.donation); | ||||
|             ab.setDisplayHomeAsUpEnabled(true); | ||||
|         } | ||||
|  | ||||
|         paypal.setOnClickListener(v -> Utils.openLink(this, Uri.parse(Const.Url.PAYPAL_URL))); | ||||
|         patreon.setOnClickListener(v -> Utils.openLink(this, Uri.parse(Const.Url.PATREON_URL))); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										164
									
								
								app/src/full/java/com/topjohnwu/magisk/FlashActivity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								app/src/full/java/com/topjohnwu/magisk/FlashActivity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.Manifest; | ||||
| import android.content.Intent; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| import android.text.TextUtils; | ||||
| import android.view.View; | ||||
| import android.widget.Button; | ||||
| import android.widget.LinearLayout; | ||||
| import android.widget.ScrollView; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import com.topjohnwu.magisk.asyncs.FlashZip; | ||||
| import com.topjohnwu.magisk.asyncs.InstallMagisk; | ||||
| import com.topjohnwu.magisk.components.BaseActivity; | ||||
| import com.topjohnwu.magisk.utils.Download; | ||||
| import com.topjohnwu.magisk.utils.RootUtils; | ||||
| import com.topjohnwu.magisk.utils.Utils; | ||||
| import com.topjohnwu.superuser.CallbackList; | ||||
| import com.topjohnwu.superuser.Shell; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.FileWriter; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Calendar; | ||||
| import java.util.List; | ||||
| import java.util.Locale; | ||||
|  | ||||
| import androidx.appcompat.app.ActionBar; | ||||
| import androidx.appcompat.widget.Toolbar; | ||||
|  | ||||
| public class FlashActivity extends BaseActivity { | ||||
|  | ||||
|     Toolbar toolbar; | ||||
|     TextView flashLogs; | ||||
|     public LinearLayout buttonPanel; | ||||
|     public Button reboot; | ||||
|     ScrollView sv; | ||||
|  | ||||
|     private List<String> logs; | ||||
|  | ||||
|     void dismiss() { | ||||
|         finish(); | ||||
|     } | ||||
|  | ||||
|     void reboot() { | ||||
|         Shell.su("/system/bin/reboot").submit(); | ||||
|     } | ||||
|  | ||||
|     void saveLogs() { | ||||
|         runWithPermission(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, () -> { | ||||
|             Calendar now = Calendar.getInstance(); | ||||
|             String filename = String.format(Locale.US, | ||||
|                     "magisk_install_log_%04d%02d%02d_%02d%02d%02d.log", | ||||
|                     now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, | ||||
|                     now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.HOUR_OF_DAY), | ||||
|                     now.get(Calendar.MINUTE), now.get(Calendar.SECOND)); | ||||
|  | ||||
|             File logFile = new File(Download.EXTERNAL_PATH, filename); | ||||
|             try (FileWriter writer = new FileWriter(logFile)) { | ||||
|                 for (String s : logs) { | ||||
|                     writer.write(s); | ||||
|                     writer.write('\n'); | ||||
|                 } | ||||
|             } catch (IOException e) { | ||||
|                 e.printStackTrace(); | ||||
|                 return; | ||||
|             } | ||||
|             Utils.toast(logFile.getPath(), Toast.LENGTH_LONG); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getDarkTheme() { | ||||
|         return R.style.AppTheme_StatusBar_Dark; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(Bundle savedInstanceState) { | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_flash); | ||||
|         ViewBinder.bind(this); | ||||
|         setSupportActionBar(toolbar); | ||||
|         ActionBar ab = getSupportActionBar(); | ||||
|         if (ab != null) { | ||||
|             ab.setTitle(R.string.flashing); | ||||
|         } | ||||
|         setFloating(); | ||||
|         setFinishOnTouchOutside(false); | ||||
|         if (!Shell.rootAccess()) | ||||
|             reboot.setVisibility(View.GONE); | ||||
|  | ||||
|         logs = new ArrayList<>(); | ||||
|         CallbackList<String> console = new CallbackList<String>(new ArrayList<>()) { | ||||
|  | ||||
|             private void updateUI() { | ||||
|                 flashLogs.setText(TextUtils.join("\n", this)); | ||||
|                 sv.postDelayed(() -> sv.fullScroll(ScrollView.FOCUS_DOWN), 10); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public void onAddElement(String s) { | ||||
|                 logs.add(s); | ||||
|                 updateUI(); | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public String set(int i, String s) { | ||||
|                 String ret = super.set(i, s); | ||||
|                 Data.mainHandler.post(this::updateUI); | ||||
|                 return ret; | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         // We must receive a Uri of the target zip | ||||
|         Intent intent = getIntent(); | ||||
|         Uri uri = intent.getData(); | ||||
|  | ||||
|         switch (intent.getStringExtra(Const.Key.FLASH_ACTION)) { | ||||
|             case Const.Value.FLASH_ZIP: | ||||
|                 new FlashZip(this, uri, console, logs).exec(); | ||||
|                 break; | ||||
|             case Const.Value.UNINSTALL: | ||||
|                 new UninstallMagisk(this, uri, console, logs).exec(); | ||||
|                 break; | ||||
|             case Const.Value.FLASH_MAGISK: | ||||
|                 new InstallMagisk(this, console, logs, InstallMagisk.DIRECT_MODE).exec(); | ||||
|                 break; | ||||
|             case Const.Value.FLASH_INACTIVE_SLOT: | ||||
|                 new InstallMagisk(this, console, logs, InstallMagisk.SECOND_SLOT_MODE).exec(); | ||||
|                 break; | ||||
|             case Const.Value.PATCH_BOOT: | ||||
|                 runWithPermission(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, | ||||
|                         () -> new InstallMagisk(this, console, logs, | ||||
|                                 intent.getParcelableExtra(Const.Key.FLASH_SET_BOOT)).exec()); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onBackPressed() { | ||||
|         // Prevent user accidentally press back button | ||||
|     } | ||||
|  | ||||
|     private static class UninstallMagisk extends FlashZip { | ||||
|  | ||||
|         private UninstallMagisk(BaseActivity context, Uri uri, List<String> console, List<String> logs) { | ||||
|             super(context, uri, console, logs); | ||||
|         } | ||||
|  | ||||
|         @Override | ||||
|         protected void onPostExecute(Integer result) { | ||||
|             if (result == 1) { | ||||
|                 Data.mainHandler.postDelayed(() -> | ||||
|                         RootUtils.uninstallPkg(getActivity().getPackageName()), 3000); | ||||
|             } else { | ||||
|                 super.onPostExecute(result); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										65
									
								
								app/src/full/java/com/topjohnwu/magisk/MagiskManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								app/src/full/java/com/topjohnwu/magisk/MagiskManager.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.content.res.Configuration; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.text.TextUtils; | ||||
|  | ||||
| import com.topjohnwu.magisk.database.MagiskDatabaseHelper; | ||||
| import com.topjohnwu.magisk.database.RepoDatabaseHelper; | ||||
| import com.topjohnwu.magisk.utils.LocaleManager; | ||||
| import com.topjohnwu.magisk.utils.RootUtils; | ||||
| import com.topjohnwu.superuser.ContainerApp; | ||||
| import com.topjohnwu.superuser.Shell; | ||||
|  | ||||
| import java.lang.ref.WeakReference; | ||||
|  | ||||
| public class MagiskManager extends ContainerApp { | ||||
|  | ||||
|     // Info | ||||
|     public boolean hasInit = false; | ||||
|  | ||||
|     // Global resources | ||||
|     public SharedPreferences prefs; | ||||
|     public MagiskDatabaseHelper mDB; | ||||
|     public RepoDatabaseHelper repoDB; | ||||
|  | ||||
|     public MagiskManager() { | ||||
|         Data.weakApp = new WeakReference<>(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onCreate() { | ||||
|         super.onCreate(); | ||||
|  | ||||
|         Shell.Config.setFlags(Shell.FLAG_MOUNT_MASTER); | ||||
|         Shell.Config.verboseLogging(BuildConfig.DEBUG); | ||||
|         Shell.Config.setInitializer(RootUtils.class); | ||||
|  | ||||
|         prefs = PreferenceManager.getDefaultSharedPreferences(this); | ||||
|         mDB = MagiskDatabaseHelper.getInstance(this); | ||||
|  | ||||
|         String pkg = mDB.getStrings(Const.Key.SU_MANAGER, null); | ||||
|         if (pkg != null && getPackageName().equals(Const.ORIG_PKG_NAME)) { | ||||
|             mDB.setStrings(Const.Key.SU_MANAGER, null); | ||||
|             Shell.su("pm uninstall " + pkg).exec(); | ||||
|         } | ||||
|         if (TextUtils.equals(pkg, getPackageName())) { | ||||
|             try { | ||||
|                 // We are the manager, remove com.topjohnwu.magisk as it could be malware | ||||
|                 getPackageManager().getApplicationInfo(Const.ORIG_PKG_NAME, 0); | ||||
|                 RootUtils.uninstallPkg(Const.ORIG_PKG_NAME); | ||||
|             } catch (PackageManager.NameNotFoundException ignored) {} | ||||
|         } | ||||
|  | ||||
|         LocaleManager.setLocale(this); | ||||
|         Data.loadConfig(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onConfigurationChanged(Configuration newConfig) { | ||||
|         super.onConfigurationChanged(newConfig); | ||||
|         LocaleManager.setLocale(this); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										211
									
								
								app/src/full/java/com/topjohnwu/magisk/MainActivity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								app/src/full/java/com/topjohnwu/magisk/MainActivity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,211 @@ | ||||
| package com.topjohnwu.magisk; | ||||
|  | ||||
| import android.content.Intent; | ||||
| import android.os.Bundle; | ||||
| import android.os.Handler; | ||||
| 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.Download; | ||||
| import com.topjohnwu.magisk.utils.Topic; | ||||
| 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; | ||||
|  | ||||
| public class MainActivity extends BaseActivity | ||||
|         implements NavigationView.OnNavigationItemSelectedListener, Topic.Subscriber { | ||||
|  | ||||
|     private final Handler mDrawerHandler = new Handler(); | ||||
|     private int mDrawerItem; | ||||
|     private static boolean fromShortcut = false; | ||||
|  | ||||
|     public Toolbar toolbar; | ||||
|     DrawerLayout drawer; | ||||
|     NavigationView navigationView; | ||||
|  | ||||
|     private float toolbarElevation; | ||||
|  | ||||
|     @Override | ||||
|     public int getDarkTheme() { | ||||
|         return R.style.AppTheme_Dark; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onCreate(final Bundle savedInstanceState) { | ||||
|         if (!mm.hasInit) { | ||||
|             startActivity(new Intent(this, Data.classMap.get(SplashActivity.class))); | ||||
|             finish(); | ||||
|         } | ||||
|  | ||||
|         super.onCreate(savedInstanceState); | ||||
|         setContentView(R.layout.activity_main); | ||||
|         ViewBinder.bind(this); | ||||
|  | ||||
|         setSupportActionBar(toolbar); | ||||
|  | ||||
|         ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.magisk, R.string.magisk) { | ||||
|             @Override | ||||
|             public void onDrawerOpened(View drawerView) { | ||||
|                 super.onDrawerOpened(drawerView); | ||||
|                 super.onDrawerSlide(drawerView, 0); // this disables the arrow @ completed tate | ||||
|             } | ||||
|  | ||||
|             @Override | ||||
|             public void onDrawerSlide(View drawerView, float slideOffset) { | ||||
|                 super.onDrawerSlide(drawerView, 0); // this disables the animation | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         toolbarElevation = toolbar.getElevation(); | ||||
|  | ||||
|         drawer.addDrawerListener(toggle); | ||||
|         toggle.syncState(); | ||||
|  | ||||
|         if (savedInstanceState == null) { | ||||
|             String section = getIntent().getStringExtra(Const.Key.OPEN_SECTION); | ||||
|             fromShortcut = section != null; | ||||
|             navigate(section); | ||||
|         } | ||||
|  | ||||
|         navigationView.setNavigationItemSelectedListener(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onResume() { | ||||
|         super.onResume(); | ||||
|         checkHideSection(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onBackPressed() { | ||||
|         if (drawer.isDrawerOpen(navigationView)) { | ||||
|             drawer.closeDrawer(navigationView); | ||||
|         } else if (mDrawerItem != R.id.magisk && !fromShortcut) { | ||||
|             navigate(R.id.magisk); | ||||
|         } else { | ||||
|             finish(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean onNavigationItemSelected(@NonNull final MenuItem menuItem) { | ||||
|         mDrawerHandler.removeCallbacksAndMessages(null); | ||||
|         mDrawerHandler.postDelayed(() -> navigate(menuItem.getItemId()), 250); | ||||
|         drawer.closeDrawer(navigationView); | ||||
|         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() && | ||||
|                 Data.magiskVersionCode >= Const.MAGISK_VER.UNIFIED && | ||||
|                 mm.prefs.getBoolean(Const.Key.MAGISKHIDE, false)); | ||||
|         menu.findItem(R.id.modules).setVisible(Shell.rootAccess() && Data.magiskVersionCode >= 0); | ||||
|         menu.findItem(R.id.downloads).setVisible(Download.checkNetworkStatus(this) | ||||
|                 && Shell.rootAccess() && Data.magiskVersionCode >= 0); | ||||
|         menu.findItem(R.id.log).setVisible(Shell.rootAccess()); | ||||
|         menu.findItem(R.id.superuser).setVisible(Shell.rootAccess() && | ||||
|                 !(Const.USER_ID > 0 && Data.multiuserMode == Const.Value.MULTIUSER_MODE_OWNER_MANAGED)); | ||||
|     } | ||||
|  | ||||
|     public void navigate(String item) { | ||||
|         int itemId = R.id.magisk; | ||||
|         if (item != null) { | ||||
|             switch (item) { | ||||
|                 case "superuser": | ||||
|                     itemId = R.id.superuser; | ||||
|                     break; | ||||
|                 case "modules": | ||||
|                     itemId = R.id.modules; | ||||
|                     break; | ||||
|                 case "downloads": | ||||
|                     itemId = R.id.downloads; | ||||
|                     break; | ||||
|                 case "magiskhide": | ||||
|                     itemId = R.id.magiskhide; | ||||
|                     break; | ||||
|                 case "log": | ||||
|                     itemId = R.id.log; | ||||
|                     break; | ||||
|                 case "settings": | ||||
|                     itemId = R.id.settings; | ||||
|                     break; | ||||
|                 case "about": | ||||
|                     itemId = R.id.app_about; | ||||
|                     break; | ||||
|                 case "donation": | ||||
|                     itemId = R.id.donation; | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         navigate(itemId); | ||||
|     } | ||||
|  | ||||
|     public void navigate(int itemId) { | ||||
|         int bak = mDrawerItem; | ||||
|         mDrawerItem = itemId; | ||||
|         navigationView.setCheckedItem(itemId); | ||||
|         switch (itemId) { | ||||
|             case R.id.magisk: | ||||
|                 fromShortcut = false; | ||||
|                 displayFragment(new MagiskFragment(), true); | ||||
|                 break; | ||||
|             case R.id.superuser: | ||||
|                 displayFragment(new SuperuserFragment(), true); | ||||
|                 break; | ||||
|             case R.id.modules: | ||||
|                 displayFragment(new ModulesFragment(), true); | ||||
|                 break; | ||||
|             case R.id.downloads: | ||||
|                 displayFragment(new ReposFragment(), true); | ||||
|                 break; | ||||
|             case R.id.magiskhide: | ||||
|                 displayFragment(new MagiskHideFragment(), true); | ||||
|                 break; | ||||
|             case R.id.log: | ||||
|                 displayFragment(new LogFragment(), false); | ||||
|                 break; | ||||
|             case R.id.settings: | ||||
|                 displayFragment(new SettingsFragment(), true); | ||||
|                 break; | ||||
|             case R.id.app_about: | ||||
|                 startActivity(new Intent(this, Data.classMap.get(AboutActivity.class))); | ||||
|                 mDrawerItem = bak; | ||||
|                 break; | ||||
|             case R.id.donation: | ||||
|                 startActivity(new Intent(this, Data.classMap.get(DonationActivity.class))); | ||||
|                 mDrawerItem = bak; | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void displayFragment(@NonNull Fragment navFragment, boolean setElevation) { | ||||
|         supportInvalidateOptionsMenu(); | ||||
|         getSupportFragmentManager() | ||||
|                 .beginTransaction() | ||||
|                 .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) | ||||
|                 .replace(R.id.content_frame, navFragment) | ||||
|                 .commitNow(); | ||||
|         toolbar.setElevation(setElevation ? toolbarElevation : 0); | ||||
|     } | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user