You've already forked revanced-patcher
							
							
				mirror of
				https://github.com/revanced/revanced-patcher
				synced 2025-11-02 07:30:52 +01:00 
			
		
		
		
	Compare commits
	
		
			351 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c2e0f57579 | ||
| 
						 | 
					242e244b18 | ||
| 
						 | 
					f338ebff6c | ||
| 
						 | 
					00e5950cf2 | ||
| 
						 | 
					5a0e3841ff | ||
| 
						 | 
					cfb459b832 | ||
| 
						 | 
					2096306107 | ||
| 
						 | 
					92eaba8081 | ||
| 
						 | 
					7be0cd8548 | ||
| 
						 | 
					ab624f04f6 | ||
| 
						 | 
					21b5c079fb | ||
| 
						 | 
					5024204046 | ||
| 
						 | 
					a44802ef4e | ||
| 
						 | 
					4c1c34ad01 | ||
| 
						 | 
					b2aecb726d | ||
| 
						 | 
					851f9c7885 | ||
| 
						 | 
					ea6fc70caa | ||
| 
						 | 
					a2875d1d64 | ||
| 
						 | 
					2be6e97817 | ||
| 
						 | 
					348d0070e7 | ||
| 
						 | 
					d53aacdad4 | ||
| 
						 | 
					f1615b7ab5 | ||
| 
						 | 
					ffb1d880d7 | ||
| 
						 | 
					e95f13ae3e | ||
| 
						 | 
					e1b984d601 | ||
| 
						 | 
					c2dc29e061 | ||
| 
						 | 
					69f2f20fd9 | ||
| 
						 | 
					525beda18e | ||
| 
						 | 
					73d3cbf4ff | ||
| 
						 | 
					70278dd79d | ||
| 
						 | 
					5e98e9e30a | ||
| 
						 | 
					ac1aff5a1a | ||
| 
						 | 
					5481d0c54c | ||
| 
						 | 
					4604742d0f | ||
| 
						 | 
					4beb907a61 | ||
| 
						 | 
					7f44174d91 | ||
| 
						 | 
					d310246852 | ||
| 
						 | 
					dcc989243c | ||
| 
						 | 
					5227e98abf | ||
| 
						 | 
					8c4dd5b3a3 | ||
| 
						 | 
					736b3eebbf | ||
| 
						 | 
					b41a542952 | ||
| 
						 | 
					d21128fe2e | ||
| 
						 | 
					cf4374b8cf | ||
| 
						 | 
					8a30b0fa10 | ||
| 
						 | 
					11a911dc67 | ||
| 
						 | 
					6e3ba7419b | ||
| 
						 | 
					50a66ccfed | ||
| 
						 | 
					0be79840b1 | ||
| 
						 | 
					d8b4c60321 | ||
| 
						 | 
					f77e99e817 | ||
| 
						 | 
					ea26c486c0 | ||
| 
						 | 
					bebb734608 | ||
| 
						 | 
					d842f82d07 | ||
| 
						 | 
					82bab58ac2 | ||
| 
						 | 
					90b7631d9e | ||
| 
						 | 
					26d449e6d9 | ||
| 
						 | 
					49466060e3 | ||
| 
						 | 
					620ea5b852 | ||
| 
						 | 
					3e2168a2b2 | ||
| 
						 | 
					13c77967b1 | ||
| 
						 | 
					f57e571a14 | ||
| 
						 | 
					fe616beb22 | ||
| 
						 | 
					41257ee87e | ||
| 
						 | 
					33ed5f0aa3 | ||
| 
						 | 
					d0a57ac00d | ||
| 
						 | 
					b0b2c10665 | ||
| 
						 | 
					cc183062ab | ||
| 
						 | 
					fe8ea9130d | ||
| 
						 | 
					f1c60093cf | ||
| 
						 | 
					687b884dc4 | ||
| 
						 | 
					ceb6fd51c1 | ||
| 
						 | 
					0b223bfe65 | ||
| 
						 | 
					308e95cf62 | ||
| 
						 | 
					db8866212a | ||
| 
						 | 
					608a05d9aa | ||
| 
						 | 
					55746ed705 | ||
| 
						 | 
					e33026c538 | ||
| 
						 | 
					ff215620bb | ||
| 
						 | 
					fec31f45da | ||
| 
						 | 
					7684b70324 | ||
| 
						 | 
					55a5d3bd4e | ||
| 
						 | 
					17a4675a8e | ||
| 
						 | 
					98085d1d45 | ||
| 
						 | 
					bc5c16f112 | ||
| 
						 | 
					f1d7217495 | ||
| 
						 | 
					64dd1526cd | ||
| 
						 | 
					c9a82608f7 | ||
| 
						 | 
					9fc42e132c | ||
| 
						 | 
					efa98ece45 | ||
| 
						 | 
					68e2acebba | ||
| 
						 | 
					7a7a8fc353 | ||
| 
						 | 
					f8306ac43d | ||
| 
						 | 
					d03591b735 | ||
| 
						 | 
					4a9184597b | ||
| 
						 | 
					0a482f8c9a | ||
| 
						 | 
					e7dacfba8c | ||
| 
						 | 
					2d7fffd4ec | ||
| 
						 | 
					f8baabbcec | ||
| 
						 | 
					716825f232 | ||
| 
						 | 
					58bd46750b | ||
| 
						 | 
					288240f163 | ||
| 
						 | 
					ff02452cb8 | ||
| 
						 | 
					462fbe2cad | ||
| 
						 | 
					7aeae93f3d | ||
| 
						 | 
					f1de9b39ef | ||
| 
						 | 
					db5b0ed7be | ||
| 
						 | 
					9f28a01c03 | ||
| 
						 | 
					80407b6102 | ||
| 
						 | 
					287841d806 | ||
| 
						 | 
					10c3be1195 | ||
| 
						 | 
					0c0e22013b | ||
| 
						 | 
					f35c8d4446 | ||
| 
						 | 
					17418d4b9c | ||
| 
						 | 
					ec1fbdf2ae | ||
| 
						 | 
					56e5a46fd5 | ||
| 
						 | 
					32e86d44a3 | ||
| 
						 | 
					7100606dfc | ||
| 
						 | 
					d7eb111460 | ||
| 
						 | 
					27ea46653e | ||
| 
						 | 
					12c43072cb | ||
| 
						 | 
					671aa6d507 | ||
| 
						 | 
					b697bbad2b | ||
| 
						 | 
					f05a404e48 | ||
| 
						 | 
					a46e948b5a | ||
| 
						 | 
					dc09ea639f | ||
| 
						 | 
					49ed096e85 | ||
| 
						 | 
					167bd83f4e | ||
| 
						 | 
					aed1eac315 | ||
| 
						 | 
					54a2f8f16f | ||
| 
						 | 
					2ca543ffb9 | ||
| 
						 | 
					58e7f815a5 | ||
| 
						 | 
					15b38fc841 | ||
| 
						 | 
					e2ca50729d | ||
| 
						 | 
					6192089b71 | ||
| 
						 | 
					a4212f6bf9 | ||
| 
						 | 
					124a2e9d3e | ||
| 
						 | 
					f77624b3b9 | ||
| 
						 | 
					a76ac04214 | ||
| 
						 | 
					0447fa9c28 | ||
| 
						 | 
					54ac1394a9 | ||
| 
						 | 
					0b04c73ac5 | ||
| 
						 | 
					079de45238 | ||
| 
						 | 
					56ce9ec2f9 | ||
| 
						 | 
					1b52e4b0f9 | ||
| 
						 | 
					098c2c1efa | ||
| 
						 | 
					64343e5a7c | ||
| 
						 | 
					0caf6caeb9 | ||
| 
						 | 
					55f6c2a9fc | ||
| 
						 | 
					c6095bc38a | ||
| 
						 | 
					09cd6aa568 | ||
| 
						 | 
					ebbaafb78e | ||
| 
						 | 
					e6de90d300 | ||
| 
						 | 
					c7922e90d0 | ||
| 
						 | 
					c1f4c0445a | ||
| 
						 | 
					caa634fac6 | ||
| 
						 | 
					f28bfe0dbd | ||
| 
						 | 
					155e787ff4 | ||
| 
						 | 
					c38f0ef42a | ||
| 
						 | 
					4456031459 | ||
| 
						 | 
					5fb59a227f | ||
| 
						 | 
					d9fb241d57 | ||
| 
						 | 
					642c4ea97e | ||
| 
						 | 
					8c8a251626 | ||
| 
						 | 
					5953d6cfb5 | ||
| 
						 | 
					a1962fe600 | ||
| 
						 | 
					77dbee3d6a | ||
| 
						 | 
					cb5e39d73e | ||
| 
						 | 
					38ef2f470a | ||
| 
						 | 
					129d84e108 | ||
| 
						 | 
					affeba76b8 | ||
| 
						 | 
					6059d3ca26 | ||
| 
						 | 
					444dee5a16 | ||
| 
						 | 
					d314466ce2 | ||
| 
						 | 
					fdaf9c21c8 | ||
| 
						 | 
					06c2b76f11 | ||
| 
						 | 
					3896b30738 | ||
| 
						 | 
					2c4b88e1a0 | ||
| 
						 | 
					dfc7e1596b | ||
| 
						 | 
					f590436399 | ||
| 
						 | 
					cbfb9ba02f | ||
| 
						 | 
					b4cfe80ad5 | ||
| 
						 | 
					b37906fa35 | ||
| 
						 | 
					356f1f1553 | ||
| 
						 | 
					e882af74ee | ||
| 
						 | 
					46875fb28e | ||
| 
						 | 
					417c3e4234 | ||
| 
						 | 
					6d2c28807b | ||
| 
						 | 
					4d6e08a650 | ||
| 
						 | 
					5cebc1fd30 | ||
| 
						 | 
					ac61731dc6 | ||
| 
						 | 
					9e4ffabd5c | ||
| 
						 | 
					3f410bd39f | ||
| 
						 | 
					d51bc32e37 | ||
| 
						 | 
					b7f6aa94cc | ||
| 
						 | 
					ff965e6953 | ||
| 
						 | 
					468d5d7421 | ||
| 
						 | 
					fc95b28c49 | ||
| 
						 | 
					69184187d9 | ||
| 
						 | 
					a802d0df46 | ||
| 
						 | 
					8de30633ae | ||
| 
						 | 
					a1fbb7990f | ||
| 
						 | 
					aa71146b1b | ||
| 
						 | 
					9fdb8f087f | ||
| 
						 | 
					670f0153de | ||
| 
						 | 
					1d7aeca696 | ||
| 
						 | 
					4e7811ea07 | ||
| 
						 | 
					e11283744a | ||
| 
						 | 
					91cdfd53ef | ||
| 
						 | 
					bc7d6b9941 | ||
| 
						 | 
					6b1e0a1656 | ||
| 
						 | 
					72c9eb2129 | ||
| 
						 | 
					4bc4b0dc01 | ||
| 
						 | 
					637d48746f | ||
| 
						 | 
					9a109c129b | ||
| 
						 | 
					d49e4ee5ea | ||
| 
						 | 
					30f0ea29a3 | ||
| 
						 | 
					49930f6565 | ||
| 
						 | 
					909d89fa8d | ||
| 
						 | 
					81d1d7f544 | ||
| 
						 | 
					67b7dff67a | ||
| 
						 | 
					4b76d19596 | ||
| 
						 | 
					080fbe9feb | ||
| 
						 | 
					d3721229bf | ||
| 
						 | 
					86c1c9c772 | ||
| 
						 | 
					c299817193 | ||
| 
						 | 
					fcc1de45ed | ||
| 
						 | 
					a29931f2ec | ||
| 
						 | 
					3fc6a139ee | ||
| 
						 | 
					4dd04975d9 | ||
| 
						 | 
					3b4db3ddb7 | ||
| 
						 | 
					c4a7117ee8 | ||
| 
						 | 
					b4e900fde8 | ||
| 
						 | 
					9818d730e4 | ||
| 
						 | 
					11a3378659 | ||
| 
						 | 
					1bb05f22d3 | ||
| 
						 | 
					26b70554c4 | ||
| 
						 | 
					93b29d2e83 | ||
| 
						 | 
					072986374a | ||
| 
						 | 
					2c590d212a | ||
| 
						 | 
					6cc863efb3 | ||
| 
						 | 
					b832812767 | ||
| 
						 | 
					c44558cacd | ||
| 
						 | 
					6d83a720cd | ||
| 
						 | 
					8d0dd9c448 | ||
| 
						 | 
					64020eec49 | ||
| 
						 | 
					4dedfb85cb | ||
| 
						 | 
					55d694579a | ||
| 
						 | 
					86db64edff | ||
| 
						 | 
					983563efb6 | ||
| 
						 | 
					37abb2db99 | ||
| 
						 | 
					5ba0b47e60 | ||
| 
						 | 
					e8f2087a6f | ||
| 
						 | 
					6ce99f5cdf | ||
| 
						 | 
					13c0c9cdd3 | ||
| 
						 | 
					58ffdb60d7 | ||
| 
						 | 
					ba56a6a2ee | ||
| 
						 | 
					ccccf5b1d2 | ||
| 
						 | 
					b507ac0a54 | ||
| 
						 | 
					e985676c2d | ||
| 
						 | 
					f7f4ba6c55 | ||
| 
						 | 
					4292f43814 | ||
| 
						 | 
					30bd4fd9fe | ||
| 
						 | 
					76de39369d | ||
| 
						 | 
					88a703ce36 | ||
| 
						 | 
					5938f6b7ea | ||
| 
						 | 
					5c0c0d6c37 | ||
| 
						 | 
					0f15077225 | ||
| 
						 | 
					273dd8d388 | ||
| 
						 | 
					1795f376ef | ||
| 
						 | 
					e7360a7692 | ||
| 
						 | 
					e1fc86934f | ||
| 
						 | 
					6b8977f178 | ||
| 
						 | 
					12c6c73de0 | ||
| 
						 | 
					db62a1607b | ||
| 
						 | 
					58bb879ef5 | ||
| 
						 | 
					254912438a | ||
| 
						 | 
					0e48918bcc | ||
| 
						 | 
					783ccf8529 | ||
| 
						 | 
					8fb2f2dc1d | ||
| 
						 | 
					2a8cc283c7 | ||
| 
						 | 
					433fe3af9f | ||
| 
						 | 
					c2d89c622e | ||
| 
						 | 
					02d6ff15fe | ||
| 
						 | 
					f2cb7ee7df | ||
| 
						 | 
					a2ac44dcc1 | ||
| 
						 | 
					3cf9d74efa | ||
| 
						 | 
					d5f89a903f | ||
| 
						 | 
					496c2242bc | ||
| 
						 | 
					98fbff87df | ||
| 
						 | 
					ddb51a1c45 | ||
| 
						 | 
					8df1155215 | ||
| 
						 | 
					53f2a61409 | ||
| 
						 | 
					746544f9d5 | ||
| 
						 | 
					c65c3df11c | ||
| 
						 | 
					b29b8f12b3 | ||
| 
						 | 
					d6945677c4 | ||
| 
						 | 
					aedf4aea08 | ||
| 
						 | 
					dc28d414dc | ||
| 
						 | 
					9755bab298 | ||
| 
						 | 
					fae4029cfc | ||
| 
						 | 
					1790f0d706 | ||
| 
						 | 
					0ba2c51676 | ||
| 
						 | 
					03cd97b49c | ||
| 
						 | 
					16a162c1dd | ||
| 
						 | 
					c9bbcf2bf2 | ||
| 
						 | 
					86e1bf6078 | ||
| 
						 | 
					1bca84ef0b | ||
| 
						 | 
					e0f8e1b71a | ||
| 
						 | 
					416d69142f | ||
| 
						 | 
					426807aeaa | ||
| 
						 | 
					90cb075a97 | ||
| 
						 | 
					ac2ca8fbd3 | ||
| 
						 | 
					69e4a49065 | ||
| 
						 | 
					a4a030f2b2 | ||
| 
						 | 
					dcc4ecd237 | ||
| 
						 | 
					57f3036a96 | ||
| 
						 | 
					753e55dfc3 | ||
| 
						 | 
					9d81baf4b4 | ||
| 
						 | 
					7cb4d4c596 | ||
| 
						 | 
					2c8565508e | ||
| 
						 | 
					c7f156e4c9 | ||
| 
						 | 
					fcef4342e8 | ||
| 
						 | 
					72783a5e74 | ||
| 
						 | 
					a379b69eeb | ||
| 
						 | 
					0a8ccba33e | ||
| 
						 | 
					519359a9eb | ||
| 
						 | 
					b615ed6aab | ||
| 
						 | 
					d718134ab2 | ||
| 
						 | 
					5e681ed381 | ||
| 
						 | 
					6e1b6479b6 | ||
| 
						 | 
					f3c9e28a62 | ||
| 
						 | 
					d5d6f85084 | ||
| 
						 | 
					b8151ebccb | ||
| 
						 | 
					5650e34432 | ||
| 
						 | 
					c893d16d52 | ||
| 
						 | 
					34f08bf206 | ||
| 
						 | 
					f02a42610b | ||
| 
						 | 
					c95e6fa92f | ||
| 
						 | 
					fd738e723b | ||
| 
						 | 
					b1d1956323 | ||
| 
						 | 
					725a8012ac | ||
| 
						 | 
					bb9a73e53b | ||
| 
						 | 
					ef2de35a74 | ||
| 
						 | 
					2a453d51a8 | ||
| 
						 | 
					43d6868d1f | ||
| 
						 | 
					cea9379b32 | ||
| 
						 | 
					a12fe7dd9e | ||
| 
						 | 
					efdd01a988 | ||
| 
						 | 
					eafe1c631f | ||
| 
						 | 
					aacf900764 | 
							
								
								
									
										3
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
[*.{kt,kts}]
 | 
			
		||||
ktlint_code_style = intellij_idea
 | 
			
		||||
ktlint_standard_no-wildcard-imports = disabled
 | 
			
		||||
							
								
								
									
										9
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#
 | 
			
		||||
# https://help.github.com/articles/dealing-with-line-endings/
 | 
			
		||||
#
 | 
			
		||||
# Linux start script should use lf
 | 
			
		||||
/gradlew        text eol=lf
 | 
			
		||||
 | 
			
		||||
# These are Windows script files and should use crlf
 | 
			
		||||
*.bat           text eol=crlf
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										72
									
								
								.github/ISSUE_TEMPLATE/bug-issue.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/ISSUE_TEMPLATE/bug-issue.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,72 +0,0 @@
 | 
			
		||||
name: 🐞 Bug report
 | 
			
		||||
description: Report a very clearly broken issue.
 | 
			
		||||
title: 'bug: <title>'
 | 
			
		||||
labels: [bug]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        # ReVanced bug report
 | 
			
		||||
 | 
			
		||||
        Important to note that your issue may have already been reported before. Please check for existing issues [here](https://github.com/revanced/revanced-patcher/labels/bug).
 | 
			
		||||
 | 
			
		||||
  - type: dropdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Type
 | 
			
		||||
      options:
 | 
			
		||||
        - Crash
 | 
			
		||||
        - Cosmetic
 | 
			
		||||
        - Other
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Bug description
 | 
			
		||||
      description: How did you find the bug? Any additional details that might help?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Steps to reproduce
 | 
			
		||||
      description: Add the steps to reproduce this bug including your environment.
 | 
			
		||||
      placeholder: Step 1. Download some files. Step 2. ...
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Relevant log output
 | 
			
		||||
      description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
 | 
			
		||||
      render: shell
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Screenshots or videos
 | 
			
		||||
      description: Add screenshots or videos that show the bug here.
 | 
			
		||||
      placeholder: Drag and drop the screenshots/videos into this box.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Solution
 | 
			
		||||
      description: If applicable, add a possible solution.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional context
 | 
			
		||||
      description: Add additional context here.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    id: acknowledgements
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Acknowledgements
 | 
			
		||||
      description: Your issue will be closed if you haven't done these steps.
 | 
			
		||||
      options:
 | 
			
		||||
        - label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I have written a short but informative title.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I filled out all of the requested information in this issue properly.
 | 
			
		||||
          required: true
 | 
			
		||||
							
								
								
									
										109
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
name: 🐞 Bug report
 | 
			
		||||
description: Report a bug or an issue.
 | 
			
		||||
title: "bug: "
 | 
			
		||||
labels: ["Bug report"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        <p align="center">
 | 
			
		||||
          <picture>
 | 
			
		||||
            <source
 | 
			
		||||
              width="256px"
 | 
			
		||||
              media="(prefers-color-scheme: dark)"
 | 
			
		||||
              srcset="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
            >
 | 
			
		||||
            <img 
 | 
			
		||||
              width="256px"
 | 
			
		||||
              src="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
            >
 | 
			
		||||
          </picture>
 | 
			
		||||
          <br>
 | 
			
		||||
          <a href="https://revanced.app/">
 | 
			
		||||
             <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
                 <img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
             </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://github.com/ReVanced">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
                   <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="http://revanced.app/discord">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
                   <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
                   <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://t.me/app_revanced">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
              </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://x.com/revancedapp">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
              </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
             </picture>
 | 
			
		||||
           </a>
 | 
			
		||||
           <br>
 | 
			
		||||
           <br>
 | 
			
		||||
           Continuing the legacy of Vanced
 | 
			
		||||
        </p>
 | 
			
		||||
 | 
			
		||||
        # ReVanced Patcher bug report
 | 
			
		||||
 | 
			
		||||
        Before creating a new bug report, please keep the following in mind:
 | 
			
		||||
 | 
			
		||||
        - **Do not submit a duplicate bug report**: Search for existing bug reports [here](https://github.com/ReVanced/revanced-patcher/issues?q=label%3A%22Bug+report%22).
 | 
			
		||||
        - **Review the contribution guidelines**: Make sure your bug report adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-patcher/blob/main/CONTRIBUTING.md).
 | 
			
		||||
        - **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Bug description
 | 
			
		||||
      description: |
 | 
			
		||||
        - Describe your bug in detail
 | 
			
		||||
        - Add steps to reproduce the bug if possible (Step 1. ... Step 2. ...)
 | 
			
		||||
        - Add images and videos if possible
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Error logs
 | 
			
		||||
      description: Exceptions can be captured by running `logcat | grep AndroidRuntime` in a shell.
 | 
			
		||||
      render: shell
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Solution
 | 
			
		||||
      description: If applicable, add a possible solution to the bug.
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional context
 | 
			
		||||
      description: Add additional context here.
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    id: acknowledgements
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Acknowledgements
 | 
			
		||||
      description: Your bug report will be closed if you don't follow the checklist below.
 | 
			
		||||
      options:
 | 
			
		||||
        - label: I have checked all open and closed bug reports and this is not a duplicate.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I have chosen an appropriate title.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: All requested information has been provided properly.
 | 
			
		||||
          required: true
 | 
			
		||||
							
								
								
									
										58
									
								
								.github/ISSUE_TEMPLATE/feature-issue.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								.github/ISSUE_TEMPLATE/feature-issue.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,58 +0,0 @@
 | 
			
		||||
name: ⭐ Feature request
 | 
			
		||||
description: Create a detailed feature request.
 | 
			
		||||
title: 'feat: <title>'
 | 
			
		||||
labels: [feature-request]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        # ReVanced feature request
 | 
			
		||||
        
 | 
			
		||||
        Do not submit requests for patches here. Please submit them [here](https://github.com/orgs/revanced/discussions/categories/patches) instead.
 | 
			
		||||
        Important to note that your feature request may have already been made before. Please check for existing feature requests [here](https://github.com/revanced/revanced-patcher/labels/feature-request).
 | 
			
		||||
 | 
			
		||||
  - type: dropdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Type
 | 
			
		||||
      options:
 | 
			
		||||
        - Functionality
 | 
			
		||||
        - Cosmetic
 | 
			
		||||
        - Other
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Issue
 | 
			
		||||
      description: What is the current problem. Why does it require a feature request?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Feature
 | 
			
		||||
      description: Describe your feature in detail. How does it solve the issue?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Motivation
 | 
			
		||||
      description: Why should your feature should be considered?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Additional context
 | 
			
		||||
      description: Add additional context here.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    id: acknowledgements
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Acknowledgements
 | 
			
		||||
      description: Your issue will be closed if you haven't done these steps.
 | 
			
		||||
      options:
 | 
			
		||||
        - label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I have written a short but informative title.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I filled out all of the requested information in this issue properly.
 | 
			
		||||
          required: true
 | 
			
		||||
							
								
								
									
										107
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								.github/ISSUE_TEMPLATE/feature_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
name: ⭐ Feature request
 | 
			
		||||
description: Create a detailed request for a new feature.
 | 
			
		||||
title: "feat: "
 | 
			
		||||
labels: ["Feature request"]
 | 
			
		||||
body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        <p align="center">
 | 
			
		||||
          <picture>
 | 
			
		||||
            <source
 | 
			
		||||
              width="256px"
 | 
			
		||||
              media="(prefers-color-scheme: dark)"
 | 
			
		||||
              srcset="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
            >
 | 
			
		||||
            <img 
 | 
			
		||||
              width="256px"
 | 
			
		||||
              src="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
            >
 | 
			
		||||
          </picture>
 | 
			
		||||
          <br>
 | 
			
		||||
          <a href="https://revanced.app/">
 | 
			
		||||
             <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
                 <img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-patcher/main/assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
             </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://github.com/ReVanced">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
                   <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="http://revanced.app/discord">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
                   <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
               <picture>
 | 
			
		||||
                   <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
                   <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
               </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://t.me/app_revanced">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
              </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://x.com/revancedapp">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
              </picture>
 | 
			
		||||
           </a>   
 | 
			
		||||
           <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
              <picture>
 | 
			
		||||
                 <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
                 <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
             </picture>
 | 
			
		||||
           </a>
 | 
			
		||||
           <br>
 | 
			
		||||
           <br>
 | 
			
		||||
           Continuing the legacy of Vanced
 | 
			
		||||
        </p>
 | 
			
		||||
 | 
			
		||||
        # ReVanced Patcher feature request
 | 
			
		||||
 | 
			
		||||
        Before creating a new feature request, please keep the following in mind:
 | 
			
		||||
 | 
			
		||||
        - **Do not submit a duplicate feature request**: Search for existing feature requests [here](https://github.com/ReVanced/revanced-patcher/issues?q=label%3A%22Feature+request%22).
 | 
			
		||||
        - **Review the contribution guidelines**: Make sure your feature request adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-patcher/blob/main/CONTRIBUTING.md).
 | 
			
		||||
        - **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Feature description
 | 
			
		||||
      description: |
 | 
			
		||||
        - Describe your feature in detail
 | 
			
		||||
        - Add images, videos, links, examples, references, etc. if possible
 | 
			
		||||
        - Add the target application name in case you request a new patch
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Motivation
 | 
			
		||||
      description: |
 | 
			
		||||
        A strong motivation is necessary for a feature request to be considered.
 | 
			
		||||
 | 
			
		||||
        - Why should this feature be implemented? 
 | 
			
		||||
        - What is the explicit use case?
 | 
			
		||||
        - What are the benefits?
 | 
			
		||||
        - What makes this feature important?
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    id: acknowledgements
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Acknowledgements
 | 
			
		||||
      description: Your feature request will be closed if you don't follow the checklist below.
 | 
			
		||||
      options:
 | 
			
		||||
        - label: I have checked all open and closed feature requests and this is not a duplicate.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: I have chosen an appropriate title.
 | 
			
		||||
          required: true
 | 
			
		||||
        - label: All requested information has been provided properly.
 | 
			
		||||
          required: true
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,2 +1,2 @@
 | 
			
		||||
firstPRMergeComment: >
 | 
			
		||||
  Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role.
 | 
			
		||||
  Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
version: 2
 | 
			
		||||
updates:
 | 
			
		||||
  - package-ecosystem: github-actions
 | 
			
		||||
    labels: []
 | 
			
		||||
    directory: /
 | 
			
		||||
    target-branch: dev
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: monthly
 | 
			
		||||
 | 
			
		||||
  - package-ecosystem: npm
 | 
			
		||||
    labels: []
 | 
			
		||||
    directory: /
 | 
			
		||||
    target-branch: dev
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: monthly
 | 
			
		||||
 | 
			
		||||
  - package-ecosystem: gradle
 | 
			
		||||
    labels: []
 | 
			
		||||
    directory: /
 | 
			
		||||
    target-branch: dev
 | 
			
		||||
    schedule:
 | 
			
		||||
      interval: monthly
 | 
			
		||||
							
								
								
									
										25
									
								
								.github/workflows/build_pull_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/build_pull_request.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
name: Build pull request
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  pull_request:
 | 
			
		||||
    branches:
 | 
			
		||||
      - dev
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  release:
 | 
			
		||||
    name: Build
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
 | 
			
		||||
      - name: Cache Gradle
 | 
			
		||||
        uses: burrunan/gradle-cache-action@v1
 | 
			
		||||
 | 
			
		||||
      - name: Build
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        run: ./gradlew build --no-daemon
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
name: PR to main
 | 
			
		||||
name: Open a PR to main
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
@@ -7,7 +7,7 @@ on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  MESSAGE: merge branch `${{ github.head_ref || github.ref_name }}` to `main`
 | 
			
		||||
  MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  pull-request:
 | 
			
		||||
@@ -15,7 +15,8 @@ jobs:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Open pull request
 | 
			
		||||
        uses: repo-sync/pull-request@v2
 | 
			
		||||
        with:
 | 
			
		||||
							
								
								
									
										41
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -6,37 +6,48 @@ on:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
      - dev
 | 
			
		||||
  pull_request:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
      - dev
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  release:
 | 
			
		||||
    name: Release
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
      packages: write
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          # Make sure the release step uses its own credentials:
 | 
			
		||||
          # https://github.com/cycjimmy/semantic-release-action#private-packages
 | 
			
		||||
          persist-credentials: false
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
      - name: Setup JDK
 | 
			
		||||
        uses: actions/setup-java@v3
 | 
			
		||||
        with:
 | 
			
		||||
          java-version: '17'
 | 
			
		||||
          distribution: 'zulu'
 | 
			
		||||
          cache: gradle
 | 
			
		||||
 | 
			
		||||
      - name: Cache Gradle
 | 
			
		||||
        uses: burrunan/gradle-cache-action@v1
 | 
			
		||||
 | 
			
		||||
      - name: Build
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        run: ./gradlew build clean
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node.js
 | 
			
		||||
        uses: actions/setup-node@v3
 | 
			
		||||
        uses: actions/setup-node@v4
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: "18"
 | 
			
		||||
          node-version: "lts/*"
 | 
			
		||||
          cache: 'npm'
 | 
			
		||||
      - name: Setup semantic-release
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: npm install
 | 
			
		||||
 | 
			
		||||
      - name: Import GPG key
 | 
			
		||||
        uses: crazy-max/ghaction-import-gpg@v6
 | 
			
		||||
        with:
 | 
			
		||||
          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
 | 
			
		||||
          passphrase: ${{ secrets.GPG_PASSPHRASE }}
 | 
			
		||||
          fingerprint: ${{ vars.GPG_FINGERPRINT }}
 | 
			
		||||
 | 
			
		||||
      - name: Release
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
        run: npm exec semantic-release
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								.github/workflows/update_documentation.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/update_documentation.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
name: Update documentation
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    paths:
 | 
			
		||||
      - docs/**
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  trigger:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    name: Dispatch event to documentation repository
 | 
			
		||||
    if: github.ref == 'refs/heads/main'
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: peter-evans/repository-dispatch@v3
 | 
			
		||||
        with:
 | 
			
		||||
          token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN  }}
 | 
			
		||||
          repository: revanced/revanced-documentation
 | 
			
		||||
          event-type: update-documentation
 | 
			
		||||
          client-payload: '{"repo": "${{ github.event.repository.name }}", "ref": "${{ github.ref }}"}'
 | 
			
		||||
							
								
								
									
										11
									
								
								.releaserc
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								.releaserc
									
									
									
									
									
								
							@@ -7,7 +7,13 @@
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "plugins": [
 | 
			
		||||
    "@semantic-release/commit-analyzer",
 | 
			
		||||
    [
 | 
			
		||||
      "@semantic-release/commit-analyzer", {
 | 
			
		||||
        "releaseRules": [
 | 
			
		||||
          { "type": "build", "scope": "Needs bump", "release": "patch" }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "@semantic-release/release-notes-generator",
 | 
			
		||||
    "@semantic-release/changelog",
 | 
			
		||||
    "gradle-semantic-release-plugin",
 | 
			
		||||
@@ -17,7 +23,8 @@
 | 
			
		||||
        "assets": [
 | 
			
		||||
          "CHANGELOG.md",
 | 
			
		||||
          "gradle.properties"
 | 
			
		||||
        ]
 | 
			
		||||
        ],
 | 
			
		||||
        "message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										992
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										992
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										99
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 👋 Contribution guidelines
 | 
			
		||||
 | 
			
		||||
This document describes how to contribute to ReVanced Patcher.
 | 
			
		||||
 | 
			
		||||
## 📖 Resources to help you get started
 | 
			
		||||
 | 
			
		||||
- The [documentation](https://github.com/ReVanced/revanced-patcher/tree/docs/docs) contains the fundamentals
 | 
			
		||||
  of ReVanced Patcher and how to use ReVanced Patcher to create patches
 | 
			
		||||
- [Our backlog](https://github.com/orgs/ReVanced/projects/12) is where we keep track of what we're working on
 | 
			
		||||
- [Issues](https://github.com/ReVanced/revanced-patcher/issues) are where we keep track of bugs and feature requests
 | 
			
		||||
 | 
			
		||||
## 🙏 Submitting a feature request
 | 
			
		||||
 | 
			
		||||
Features can be requested by opening an issue using the
 | 
			
		||||
[Feature request issue template](https://github.com/ReVanced/revanced-patcher/issues/new?assignees=&labels=Feature+request&projects=&template=feature_request.yml&title=feat%3A+).
 | 
			
		||||
 | 
			
		||||
> **Note**
 | 
			
		||||
> Requests can be accepted or rejected at the discretion of maintainers of ReVanced Patcher.
 | 
			
		||||
> Good motivation has to be provided for a request to be accepted.
 | 
			
		||||
 | 
			
		||||
## 🐞 Submitting a bug report
 | 
			
		||||
 | 
			
		||||
If you encounter a bug while using ReVanced Patcher, open an issue using the
 | 
			
		||||
[Bug report issue template](https://github.com/ReVanced/revanced-patcher/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).
 | 
			
		||||
 | 
			
		||||
## 📝 How to contribute
 | 
			
		||||
 | 
			
		||||
1. Before contributing, it is recommended to open an issue to discuss your change
 | 
			
		||||
   with the maintainers of ReVanced Patcher. This will help you determine whether your change is acceptable
 | 
			
		||||
   and whether it is worth your time to implement it
 | 
			
		||||
2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`
 | 
			
		||||
3. Commit your changes
 | 
			
		||||
4. Submit a pull request to the `dev` branch of the repository and reference issues
 | 
			
		||||
   that your pull request closes in the description of your pull request
 | 
			
		||||
5. Our team will review your pull request and provide feedback. Once your pull request is approved,
 | 
			
		||||
   it will be merged into the `dev` branch and will be included in the next release of ReVanced Patcher
 | 
			
		||||
 | 
			
		||||
❤️ Thank you for considering contributing to ReVanced Patcher,  
 | 
			
		||||
ReVanced
 | 
			
		||||
							
								
								
									
										122
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								README.md
									
									
									
									
									
								
							@@ -1,3 +1,125 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 💉 ReVanced Patcher
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
ReVanced Patcher used to patch Android applications.
 | 
			
		||||
 | 
			
		||||
## ❓ About
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher is a library that is used to patch Android applications.  
 | 
			
		||||
It powers [ReVanced Manager](https://github.com/ReVanced/revanced-manager),
 | 
			
		||||
[ReVanced CLI](https://github.com/ReVanced/revanced-cli)
 | 
			
		||||
and [ReVanced Library](https://github.com/ReVanced/revanced-library) and a rich set of patches have been developed
 | 
			
		||||
using ReVanced Patcher in the [ReVanced Patches](https://github.com/ReVanced/revanced-patches) repository.
 | 
			
		||||
 | 
			
		||||
## 💪 Features
 | 
			
		||||
 | 
			
		||||
Some of the features the ReVanced Patcher provides are:
 | 
			
		||||
 | 
			
		||||
- 🔧 **Patch Dalvik VM bytecode**: Disassemble and assemble Dalvik bytecode
 | 
			
		||||
- 📦 **Patch APK resources**: Decode and build Android APK resources
 | 
			
		||||
- 📂 **Patch arbitrary APK files**: Read and write arbitrary files directly from and to APK files
 | 
			
		||||
- 🧩 **Write modular patches**: Extensive API to write modular patches that can patch Dalvik VM bytecode,
 | 
			
		||||
APK resources and arbitrary APK files
 | 
			
		||||
 | 
			
		||||
## 🚀 How to get started
 | 
			
		||||
 | 
			
		||||
To use ReVanced Patcher in your project, follow these steps:
 | 
			
		||||
 | 
			
		||||
1. [Add the repository](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-gradle-registry#using-a-published-package)
 | 
			
		||||
to your project
 | 
			
		||||
2. Add the dependency to your project:
 | 
			
		||||
 | 
			
		||||
   ```kt
 | 
			
		||||
    dependencies {
 | 
			
		||||
        implementation("app.revanced:revanced-patcher:{$version}")
 | 
			
		||||
    }
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
For a minimal project configuration, 
 | 
			
		||||
see [ReVanced Patches template](https://github.com/ReVanced/revanced-patches-template).
 | 
			
		||||
 | 
			
		||||
## 📚 Everything else
 | 
			
		||||
 | 
			
		||||
### 📙 Contributing
 | 
			
		||||
 | 
			
		||||
Thank you for considering contributing to ReVanced Patcher.
 | 
			
		||||
You can find the contribution guidelines [here](CONTRIBUTING.md).
 | 
			
		||||
 | 
			
		||||
### 🛠️ Building
 | 
			
		||||
 | 
			
		||||
To build ReVanced Patcher,
 | 
			
		||||
you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
 | 
			
		||||
 | 
			
		||||
### 📃 Documentation
 | 
			
		||||
 | 
			
		||||
The documentation contains the fundamentals of ReVanced Patcher and how to use ReVanced Patcher to create patches.
 | 
			
		||||
You can find it [here](https://github.com/ReVanced/revanced-patcher/tree/main/docs).
 | 
			
		||||
 | 
			
		||||
## 📜 Licence
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher is licensed under the GPLv3 license. Please see the [licence file](LICENSE) for more information.
 | 
			
		||||
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Patcher as long as you track changes/dates in source files.
 | 
			
		||||
Any modifications to ReVanced Patcher must also be made available under the GPL,
 | 
			
		||||
along with build & install instructions.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										872
									
								
								api/revanced-patcher.api
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										872
									
								
								api/revanced-patcher.api
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 11 KiB  | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 11 KiB  | 
							
								
								
									
										1
									
								
								assets/revanced-logo/revanced-logo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								assets/revanced-logo/revanced-logo.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 2.8 KiB  | 
							
								
								
									
										134
									
								
								build.gradle.kts
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								build.gradle.kts
									
									
									
									
									
								
							@@ -1,71 +1,117 @@
 | 
			
		||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
 | 
			
		||||
 | 
			
		||||
plugins {
 | 
			
		||||
    kotlin("jvm") version "1.8.10"
 | 
			
		||||
    alias(libs.plugins.kotlin)
 | 
			
		||||
    alias(libs.plugins.binary.compatibility.validator)
 | 
			
		||||
    `maven-publish`
 | 
			
		||||
    signing
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
group = "app.revanced"
 | 
			
		||||
 | 
			
		||||
val githubUsername: String = project.findProperty("gpr.user") as? String ?: System.getenv("GITHUB_ACTOR")
 | 
			
		||||
val githubPassword: String = project.findProperty("gpr.key") as? String ?: System.getenv("GITHUB_TOKEN")
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
    maven {
 | 
			
		||||
        url = uri("https://maven.pkg.github.com/revanced/multidexlib2")
 | 
			
		||||
        credentials {
 | 
			
		||||
            username = githubUsername
 | 
			
		||||
            password = githubPassword
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    implementation("xpp3:xpp3:1.1.4c")
 | 
			
		||||
    implementation("app.revanced:smali:2.5.3-a3836654")
 | 
			
		||||
    implementation("app.revanced:multidexlib2:2.5.3-a3836654")
 | 
			
		||||
    implementation("app.revanced:apktool-lib:2.7.0")
 | 
			
		||||
 | 
			
		||||
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.8.20-RC")
 | 
			
		||||
    testImplementation("org.jetbrains.kotlin:kotlin-test:1.8.20-RC")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks {
 | 
			
		||||
    processResources {
 | 
			
		||||
        expand("projectVersion" to project.version)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test {
 | 
			
		||||
        useJUnitPlatform()
 | 
			
		||||
        testLogging {
 | 
			
		||||
            events("PASSED", "SKIPPED", "FAILED")
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    processResources {
 | 
			
		||||
        expand("projectVersion" to project.version)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
    google()
 | 
			
		||||
    maven {
 | 
			
		||||
        // A repository must be specified for some reason. "registry" is a dummy.
 | 
			
		||||
        url = uri("https://maven.pkg.github.com/revanced/registry")
 | 
			
		||||
        credentials {
 | 
			
		||||
            username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
 | 
			
		||||
            password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    // TODO: Convert project to KMP.
 | 
			
		||||
    compileOnly(libs.android) {
 | 
			
		||||
        // Exclude, otherwise the org.w3c.dom API breaks.
 | 
			
		||||
        exclude(group = "xerces", module = "xmlParserAPIs")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    implementation(libs.apktool.lib)
 | 
			
		||||
    implementation(libs.kotlin.reflect)
 | 
			
		||||
    implementation(libs.kotlinx.coroutines.core)
 | 
			
		||||
    implementation(libs.multidexlib2)
 | 
			
		||||
    implementation(libs.smali)
 | 
			
		||||
    implementation(libs.xpp3)
 | 
			
		||||
 | 
			
		||||
    testImplementation(libs.mockk)
 | 
			
		||||
    testImplementation(libs.kotlin.test)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
kotlin {
 | 
			
		||||
    compilerOptions {
 | 
			
		||||
        jvmTarget.set(JvmTarget.JVM_11)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
java {
 | 
			
		||||
    withSourcesJar()
 | 
			
		||||
}
 | 
			
		||||
    targetCompatibility = JavaVersion.VERSION_11
 | 
			
		||||
 | 
			
		||||
kotlin {
 | 
			
		||||
    jvmToolchain(11)
 | 
			
		||||
    withSourcesJar()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
publishing {
 | 
			
		||||
    repositories {
 | 
			
		||||
        if (System.getenv("GITHUB_ACTOR") != null)
 | 
			
		||||
            maven {
 | 
			
		||||
                name = "GitHubPackages"
 | 
			
		||||
                url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
 | 
			
		||||
                credentials {
 | 
			
		||||
                    username = System.getenv("GITHUB_ACTOR")
 | 
			
		||||
                    password = System.getenv("GITHUB_TOKEN")
 | 
			
		||||
        maven {
 | 
			
		||||
            name = "GitHubPackages"
 | 
			
		||||
            url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
 | 
			
		||||
            credentials {
 | 
			
		||||
                username = System.getenv("GITHUB_ACTOR")
 | 
			
		||||
                password = System.getenv("GITHUB_TOKEN")
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    publications {
 | 
			
		||||
        create<MavenPublication>("revanced-patcher-publication") {
 | 
			
		||||
            from(components["java"])
 | 
			
		||||
 | 
			
		||||
            version = project.version.toString()
 | 
			
		||||
 | 
			
		||||
            pom {
 | 
			
		||||
                name = "ReVanced Patcher"
 | 
			
		||||
                description = "Patcher used by ReVanced."
 | 
			
		||||
                url = "https://revanced.app"
 | 
			
		||||
 | 
			
		||||
                licenses {
 | 
			
		||||
                    license {
 | 
			
		||||
                        name = "GNU General Public License v3.0"
 | 
			
		||||
                        url = "https://www.gnu.org/licenses/gpl-3.0.en.html"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                developers {
 | 
			
		||||
                    developer {
 | 
			
		||||
                        id = "ReVanced"
 | 
			
		||||
                        name = "ReVanced"
 | 
			
		||||
                        email = "contact@revanced.app"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                scm {
 | 
			
		||||
                    connection = "scm:git:git://github.com/revanced/revanced-patcher.git"
 | 
			
		||||
                    developerConnection = "scm:git:git@github.com:revanced/revanced-patcher.git"
 | 
			
		||||
                    url = "https://github.com/revanced/revanced-patcher"
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        else
 | 
			
		||||
            mavenLocal()
 | 
			
		||||
    }
 | 
			
		||||
    publications {
 | 
			
		||||
        register<MavenPublication>("gpr") {
 | 
			
		||||
            from(components["java"])
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
signing {
 | 
			
		||||
    useGpgCmd()
 | 
			
		||||
    sign(publishing.publications["revanced-patcher-publication"])
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								docs/1_patcher_intro.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								docs/1_patcher_intro.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="../assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="../assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 💉 Introduction to ReVanced Patcher
 | 
			
		||||
 | 
			
		||||
To create patches for Android apps, it is recommended to know the basic concept of ReVanced Patcher.
 | 
			
		||||
 | 
			
		||||
## 📙 How it works
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher is a library that allows modifying Android apps by applying patches.
 | 
			
		||||
It is built on top of [Smali](https://github.com/google/smali) for bytecode manipulation and [Androlib (Apktool)](https://github.com/iBotPeaches/Apktool)
 | 
			
		||||
for resource decoding and encoding.
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher receives a list of patches and applies them to a given APK file.
 | 
			
		||||
It then returns the modified components of the APK file, such as modified dex files and resources,
 | 
			
		||||
that can be repackaged into a new APK file.
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher has a simple API that allows you to load patches from RVP (JAR or DEX container) files
 | 
			
		||||
and apply them to an APK file. Later on, you will learn how to create patches.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
val patches = loadPatchesFromJar(setOf(File("revanced-patches.rvp")))
 | 
			
		||||
 | 
			
		||||
val patcherResult = Patcher(PatcherConfig(apkFile = File("some.apk"))).use { patcher ->
 | 
			
		||||
    // Here you can access metadata about the APK file through patcher.context.packageMetadata
 | 
			
		||||
    // such as package name, version code, version name, etc.
 | 
			
		||||
 | 
			
		||||
    // Add patches.
 | 
			
		||||
    patcher += patches
 | 
			
		||||
 | 
			
		||||
    // Execute the patches.
 | 
			
		||||
    runBlocking {
 | 
			
		||||
        patcher().collect { patchResult ->
 | 
			
		||||
            if (patchResult.exception != null)
 | 
			
		||||
                logger.info("\"${patchResult.patch}\" failed:\n${patchResult.exception}")
 | 
			
		||||
            else
 | 
			
		||||
                logger.info("\"${patchResult.patch}\" succeeded")
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Compile and save the patched APK file components.
 | 
			
		||||
    patcher.get()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// The result of the patcher contains the modified components of the APK file that can be repackaged into a new APK file.
 | 
			
		||||
val dexFiles = patcherResult.dexFiles
 | 
			
		||||
val resources = patcherResult.resources
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## ⏭️ What's next
 | 
			
		||||
 | 
			
		||||
The next page teaches the fundamentals of ReVanced Patches.
 | 
			
		||||
 | 
			
		||||
Continue: [🧩 Introduction to ReVanced Patches](2_patches_intro.md)
 | 
			
		||||
							
								
								
									
										112
									
								
								docs/2_1_setup.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								docs/2_1_setup.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="../assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="../assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 👶 Setting up a development environment
 | 
			
		||||
 | 
			
		||||
To start developing patches with ReVanced Patcher, you must prepare a development environment.
 | 
			
		||||
 | 
			
		||||
## 📝 Prerequisites
 | 
			
		||||
 | 
			
		||||
- A Java IDE with Kotlin support, such as [IntelliJ IDEA](https://www.jetbrains.com/idea/)
 | 
			
		||||
- Knowledge of Java, [Kotlin](https://kotlinlang.org), and [Dalvik bytecode](https://source.android.com/docs/core/runtime/dalvik-bytecode)
 | 
			
		||||
- Android reverse engineering skills and tools such as [jadx](https://github.com/skylot/jadx)
 | 
			
		||||
 | 
			
		||||
## 🏃 Prepare the environment
 | 
			
		||||
 | 
			
		||||
Throughout the documentation, [ReVanced Patches](https://github.com/revanced/revanced-patches) will be used as an example project.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> To start a fresh project, 
 | 
			
		||||
> you can use the [ReVanced Patches template](https://github.com/revanced/revanced-patches-template).
 | 
			
		||||
 | 
			
		||||
1. Clone the repository
 | 
			
		||||
 | 
			
		||||
   ```bash
 | 
			
		||||
   git clone https://github.com/revanced/revanced-patches && cd revanced-patches
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
2. Build the project
 | 
			
		||||
 | 
			
		||||
   ```bash
 | 
			
		||||
   ./gradlew build
 | 
			
		||||
   ```
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> If the build fails due to authentication, you may need to authenticate to GitHub Packages.
 | 
			
		||||
> Create a PAT with the scope `read:packages` [here](https://github.com/settings/tokens/new?scopes=read:packages&description=ReVanced) and add your token to ~/.gradle/gradle.properties.
 | 
			
		||||
>
 | 
			
		||||
> Example `gradle.properties` file:
 | 
			
		||||
>
 | 
			
		||||
> ```properties
 | 
			
		||||
> gpr.user = user
 | 
			
		||||
> gpr.key = key
 | 
			
		||||
> ```
 | 
			
		||||
 | 
			
		||||
3. Open the project in your IDE
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> It is a good idea to set up a complete development environment for ReVanced, so that you can also test your patches
 | 
			
		||||
> by following the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
 | 
			
		||||
 | 
			
		||||
## ⏭️ What's next
 | 
			
		||||
 | 
			
		||||
The next page will go into details about a ReVanced patch.
 | 
			
		||||
 | 
			
		||||
Continue: [🧩 Anatomy of a patch](2_2_patch_anatomy.md)
 | 
			
		||||
							
								
								
									
										293
									
								
								docs/2_2_1_fingerprinting.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								docs/2_2_1_fingerprinting.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										262
									
								
								docs/2_2_patch_anatomy.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										262
									
								
								docs/2_2_patch_anatomy.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										126
									
								
								docs/2_patches_intro.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								docs/2_patches_intro.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="../assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="../assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 🧩 Introduction to ReVanced Patches
 | 
			
		||||
 | 
			
		||||
Learn the basic concepts of ReVanced Patcher and how to create patches.
 | 
			
		||||
 | 
			
		||||
## 📙 Fundamentals
 | 
			
		||||
 | 
			
		||||
A patch is a piece of code that modifies an Android application.  
 | 
			
		||||
There are multiple types of patches. Each type can modify a different part of the APK, such as the Dalvik VM bytecode, 
 | 
			
		||||
the APK resources, or arbitrary files in the APK:
 | 
			
		||||
 | 
			
		||||
- A `BytecodePatch` modifies the Dalvik VM bytecode
 | 
			
		||||
- A `ResourcePatch` modifies (decoded) resources
 | 
			
		||||
- A `RawResourcePatch` modifies arbitrary files
 | 
			
		||||
 | 
			
		||||
Each patch can declare a set of dependencies on other patches. ReVanced Patcher will first execute dependencies
 | 
			
		||||
before executing the patch itself. This way, multiple patches can work together for abstract purposes in a modular way.
 | 
			
		||||
 | 
			
		||||
The `execute` function is the entry point for a patch. It is called by ReVanced Patcher when the patch is executed.
 | 
			
		||||
The `execute` function receives an instance of a context object that provides access to the APK.
 | 
			
		||||
The patch can use this context to modify the APK.
 | 
			
		||||
 | 
			
		||||
Each type of context provides different APIs to modify the APK. For example, the `BytecodePatchContext` provides APIs
 | 
			
		||||
to modify the Dalvik VM bytecode, while the `ResourcePatchContext` provides APIs to modify resources.
 | 
			
		||||
 | 
			
		||||
The difference between `ResourcePatch` and `RawResourcePatch` is that ReVanced Patcher will decode the resources
 | 
			
		||||
if it is supplied a `ResourcePatch` for execution or if any patch depends on a `ResourcePatch`
 | 
			
		||||
and will not decode the resources before executing `RawResourcePatch`.
 | 
			
		||||
Both, `ResourcePatch` and `RawResourcePatch` can modify arbitrary files in the APK,
 | 
			
		||||
whereas only `ResourcePatch` can modify decoded resources. The choice of which type to use depends on the use case.
 | 
			
		||||
Decoding and building resources is a time- and resource-consuming,
 | 
			
		||||
so if the patch does not need to modify decoded resources, it is better to use `RawResourcePatch` or `BytecodePatch`.
 | 
			
		||||
 | 
			
		||||
Example of patches:
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
@Surpress("unused")
 | 
			
		||||
val bytecodePatch = bytecodePatch {
 | 
			
		||||
    execute { 
 | 
			
		||||
        // More about this on the next page of the documentation.
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Surpress("unused")
 | 
			
		||||
val rawResourcePatch = rawResourcePatch {
 | 
			
		||||
    execute {
 | 
			
		||||
        // More about this on the next page of the documentation.
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Surpress("unused")
 | 
			
		||||
val resourcePatch = resourcePatch {
 | 
			
		||||
    execute {
 | 
			
		||||
        // More about this on the next page of the documentation.
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> To see real-world examples of patches,
 | 
			
		||||
> check out the repository for [ReVanced Patches](https://github.com/revanced/revanced-patches).
 | 
			
		||||
 | 
			
		||||
## ⏭️ Whats next
 | 
			
		||||
 | 
			
		||||
The next page will guide you through creating a development environment for creating patches.
 | 
			
		||||
 | 
			
		||||
Continue: [👶 Setting up a development environment](2_1_setup.md)
 | 
			
		||||
							
								
								
									
										105
									
								
								docs/3_structure_and_conventions.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								docs/3_structure_and_conventions.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="../assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="../assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 📜 Project structure and conventions
 | 
			
		||||
 | 
			
		||||
Over time, a specific project structure and conventions have been established.
 | 
			
		||||
 | 
			
		||||
## 📁 File structure
 | 
			
		||||
 | 
			
		||||
Patches are organized in a specific way. The file structure looks as follows:
 | 
			
		||||
 | 
			
		||||
```text
 | 
			
		||||
📦your.patches.app.category
 | 
			
		||||
 ├ 🔍Fingerprints.kt
 | 
			
		||||
 └ 🧩SomePatch.kt
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Moving fingerprints to a separate file isn't strictly necessary, but it helps the organization when a patch uses multiple fingerprints.
 | 
			
		||||
 | 
			
		||||
## 📙 Conventions
 | 
			
		||||
 | 
			
		||||
- 🔥 Name a patch after what it does. For example, if a patch removes ads, name it `Remove ads`.
 | 
			
		||||
  If a patch changes the color of a button, name it `Change button color`
 | 
			
		||||
- 🔥 Write the patch description in the third person, present tense, and end it with a period.
 | 
			
		||||
  If a patch removes ads, the description can be omitted because of redundancy,
 | 
			
		||||
  but if a patch changes the color of a button, the description can be _Changes the color of the resume button to red._
 | 
			
		||||
- 🔥 Write patches with modularity and reusability in mind. Patches can depend on each other,
 | 
			
		||||
  so it is important to write patches in a way that can be used in different contexts.
 | 
			
		||||
- 🔥🔥 Keep patches as minimal as possible. This reduces the risk of failing patches.
 | 
			
		||||
  Instead of involving many abstract changes in one patch or writing entire methods or classes in a patch,
 | 
			
		||||
  you can write code in extensions. An extension is a precompiled DEX file that is merged into the patched app 
 | 
			
		||||
  before this patch is executed.
 | 
			
		||||
  Patches can then reference methods and classes from extensions.
 | 
			
		||||
  A real-world example of extensions can be found in the [ReVanced Patches](https://github.com/ReVanced/revanced-patches) repository
 | 
			
		||||
- 🔥🔥🔥 Do not overload a fingerprint with information about a method that's likely to change.
 | 
			
		||||
  In the example of an obfuscated method, it's better to fingerprint the method by its return type
 | 
			
		||||
  and parameters rather than its name because the name is likely to change. An intelligent selection
 | 
			
		||||
  of an opcode pattern or strings in a method can result in a strong fingerprint dynamic to app updates.
 | 
			
		||||
- 🔥🔥🔥 Document your patches. Patches are abstract, so it is important to document parts of the code
 | 
			
		||||
  that are not self-explanatory. For example, explain why and how a certain method is patched or large blocks
 | 
			
		||||
  of instructions that are modified or added to a method
 | 
			
		||||
 | 
			
		||||
## ⏭️ What's next
 | 
			
		||||
 | 
			
		||||
The next page discusses useful APIs for patch development.
 | 
			
		||||
 | 
			
		||||
Continue: [💪 Advanced APIs](4_apis.md)
 | 
			
		||||
							
								
								
									
										116
									
								
								docs/4_apis.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								docs/4_apis.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
# 💪 Advanced APIs
 | 
			
		||||
 | 
			
		||||
A handful of APIs are available to make patch development easier and more efficient.
 | 
			
		||||
 | 
			
		||||
## 📙 Overview
 | 
			
		||||
 | 
			
		||||
1. 👹 Create mutable replacements of classes with `proxy(ClassDef)`
 | 
			
		||||
2. 🔍 Find and create mutable replaces with `classBy(Predicate)`
 | 
			
		||||
3. 🏃 Navigate method calls recursively by index with `navigate(Method)`
 | 
			
		||||
4. 💾 Read and write resource files with `get(String, Boolean)` and `delete(String)`
 | 
			
		||||
5. 📃 Read and write DOM files using `document(String)` and  `document(InputStream)`
 | 
			
		||||
 | 
			
		||||
### 🧰 APIs
 | 
			
		||||
 | 
			
		||||
#### 👹 `proxy(ClassDef)`
 | 
			
		||||
 | 
			
		||||
By default, the classes are immutable, meaning they cannot be modified.
 | 
			
		||||
To make a class mutable, use the `proxy(ClassDef)` function.
 | 
			
		||||
This function creates a lazy mutable copy of the class definition.
 | 
			
		||||
Accessing the property will replace the original class definition with the mutable copy,
 | 
			
		||||
thus allowing you to make changes to the class. Subsequent accesses will return the same mutable copy.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    val mutableClass = proxy(classDef)
 | 
			
		||||
    mutableClass.methods.add(Method())
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 🔍 `classBy(Predicate)`
 | 
			
		||||
 | 
			
		||||
The `classBy(Predicate)` function is an alternative to finding and creating mutable classes by a predicate.
 | 
			
		||||
It automatically proxies the class definition, making it mutable.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    // Alternative to proxy(classes.find { it.name == "Lcom/example/MyClass;" })?.classDef
 | 
			
		||||
    val classDef = classBy { it.name == "Lcom/example/MyClass;" }?.classDef
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 🏃 `navigate(Method).at(index)`
 | 
			
		||||
 | 
			
		||||
The `navigate(Method)` function allows you to navigate method calls recursively by index.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    // Sequentially navigate to the instructions at index 1 within 'someMethod'.
 | 
			
		||||
    val method = navigate(someMethod).at(1).original() // original() returns the original immutable method.
 | 
			
		||||
    
 | 
			
		||||
    // Further navigate to the second occurrence where the instruction's opcode is 'INVOKEVIRTUAL'.
 | 
			
		||||
    // stop() returns the mutable copy of the method.
 | 
			
		||||
    val method = navigate(someMethod).at(2) { instruction -> instruction.opcode == Opcode.INVOKEVIRTUAL }.stop()
 | 
			
		||||
    
 | 
			
		||||
    // Alternatively, to stop(), you can delegate the method to a variable.
 | 
			
		||||
    val method by navigate(someMethod).at(1)
 | 
			
		||||
    
 | 
			
		||||
    // You can chain multiple calls to at() to navigate deeper into the method.
 | 
			
		||||
    val method by navigate(someMethod).at(1).at(2, 3, 4).at(5)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 💾 `get(String, Boolean)` and `delete(String)`
 | 
			
		||||
 | 
			
		||||
The `get(String, Boolean)` function returns a `File` object that can be used to read and write resource files.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    val file = get("res/values/strings.xml")
 | 
			
		||||
    val content = file.readText()
 | 
			
		||||
    file.writeText(content)
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The `delete` function can mark files for deletion when the APK is rebuilt.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    delete("res/values/strings.xml")
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### 📃 `document(String)`  and  `document(InputStream)`
 | 
			
		||||
 | 
			
		||||
The `document` function is used to read and write DOM files.
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute { 
 | 
			
		||||
    document("res/values/strings.xml").use { document ->
 | 
			
		||||
        val element = doc.createElement("string").apply {
 | 
			
		||||
            textContent = "Hello, World!"
 | 
			
		||||
        }
 | 
			
		||||
        document.documentElement.appendChild(element)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also read documents from an `InputStream`:
 | 
			
		||||
 | 
			
		||||
```kt
 | 
			
		||||
execute {
 | 
			
		||||
    val inputStream = classLoader.getResourceAsStream("some.xml")
 | 
			
		||||
    document(inputStream).use { document ->
 | 
			
		||||
        // ...
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 🎉 Afterword
 | 
			
		||||
 | 
			
		||||
ReVanced Patcher is a powerful library to patch Android applications, offering a rich set of APIs to develop patches
 | 
			
		||||
that outlive app updates. Patches make up ReVanced; without you, the community of patch developers,
 | 
			
		||||
ReVanced would not be what it is today. We hope that this documentation has been helpful to you
 | 
			
		||||
and are excited to see what you will create with ReVanced Patcher. If you have any questions or need help,
 | 
			
		||||
talk to us on one of our platforms linked on [revanced.app](https://revanced.app) or open an issue in case of a bug or feature request,  
 | 
			
		||||
ReVanced
 | 
			
		||||
							
								
								
									
										73
									
								
								docs/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								docs/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <picture>
 | 
			
		||||
    <source
 | 
			
		||||
      width="256px"
 | 
			
		||||
      media="(prefers-color-scheme: dark)"
 | 
			
		||||
      srcset="../assets/revanced-headline/revanced-headline-vertical-dark.svg"
 | 
			
		||||
    >
 | 
			
		||||
    <img 
 | 
			
		||||
      width="256px"
 | 
			
		||||
      src="../assets/revanced-headline/revanced-headline-vertical-light.svg"
 | 
			
		||||
    >
 | 
			
		||||
  </picture>
 | 
			
		||||
  <br>
 | 
			
		||||
  <a href="https://revanced.app/">
 | 
			
		||||
     <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
         <img height="24px" src="../assets/revanced-logo/revanced-logo.svg" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://github.com/ReVanced">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
 | 
			
		||||
           <img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="http://revanced.app/discord">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://reddit.com/r/revancedapp">
 | 
			
		||||
       <picture>
 | 
			
		||||
           <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
           <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
 | 
			
		||||
       </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://t.me/app_revanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://x.com/revancedapp">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
 | 
			
		||||
      </picture>
 | 
			
		||||
   </a>   
 | 
			
		||||
   <a href="https://www.youtube.com/@ReVanced">
 | 
			
		||||
      <picture>
 | 
			
		||||
         <source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
         <img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
 | 
			
		||||
     </picture>
 | 
			
		||||
   </a>
 | 
			
		||||
   <br>
 | 
			
		||||
   <br>
 | 
			
		||||
   Continuing the legacy of Vanced
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
# 💉 Documentation of ReVanced Patcher
 | 
			
		||||
 | 
			
		||||
This documentation contains the fundamentals of ReVanced Patcher and how to use ReVanced Patcher to create patches
 | 
			
		||||
 | 
			
		||||
## 📖 Table of content
 | 
			
		||||
 | 
			
		||||
1. [💉 Introduction to ReVanced Patcher](1_patcher_intro.md)
 | 
			
		||||
2. [🧩 Introduction to ReVanced Patches](2_patches_intro.md)
 | 
			
		||||
   1. [👶 Setting up a development environment](2_1_setup.md)
 | 
			
		||||
   2. [🧩 Anatomy of a ReVanced patch](2_2_patch_anatomy.md)
 | 
			
		||||
      1. [🔎 Fingerprinting](2_2_1_fingerprinting.md)
 | 
			
		||||
   3. [📜 Project structure and conventions](3_structure_and_conventions.md)
 | 
			
		||||
   4. [💪 Advanced APIs](4_apis.md)
 | 
			
		||||
@@ -1,2 +1,3 @@
 | 
			
		||||
kotlin.code.style = official
 | 
			
		||||
version = 10.0.0
 | 
			
		||||
org.gradle.parallel = true
 | 
			
		||||
org.gradle.caching = true
 | 
			
		||||
version = 20.0.2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								gradle/libs.versions.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gradle/libs.versions.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
[versions]
 | 
			
		||||
android = "4.1.1.4"
 | 
			
		||||
apktool-lib = "2.9.3"
 | 
			
		||||
binary-compatibility-validator = "0.15.1"
 | 
			
		||||
kotlin = "2.0.0"
 | 
			
		||||
kotlinx-coroutines-core = "1.8.1"
 | 
			
		||||
mockk = "1.13.10"
 | 
			
		||||
multidexlib2 = "3.0.3.r3"
 | 
			
		||||
# Tracking https://github.com/google/smali/issues/64.
 | 
			
		||||
#noinspection GradleDependency
 | 
			
		||||
smali = "3.0.5"
 | 
			
		||||
xpp3 = "1.1.4c"
 | 
			
		||||
 | 
			
		||||
[libraries]
 | 
			
		||||
android = { module = "com.google.android:android", version.ref = "android" }
 | 
			
		||||
apktool-lib = { module = "app.revanced:apktool-lib", version.ref = "apktool-lib" }
 | 
			
		||||
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
 | 
			
		||||
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines-core" }
 | 
			
		||||
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
 | 
			
		||||
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
 | 
			
		||||
multidexlib2 = { module = "app.revanced:multidexlib2", version.ref = "multidexlib2" }
 | 
			
		||||
smali = { module = "com.android.tools.smali:smali", version.ref = "smali" }
 | 
			
		||||
xpp3 = { module = "xpp3:xpp3", version.ref = "xpp3" }
 | 
			
		||||
 | 
			
		||||
[plugins]
 | 
			
		||||
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
 | 
			
		||||
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user