Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: patch options #81

Merged
merged 6 commits into from Aug 1, 2022
Merged

feat: patch options #81

merged 6 commits into from Aug 1, 2022

Conversation

Sculas
Copy link
Contributor

@Sculas Sculas commented Aug 1, 2022

This PR implements Patch Options, which resolves #61.

@Sculas Sculas self-assigned this Aug 1, 2022
@oSumAtrIX oSumAtrIX changed the title feat: Patch Options feat: patch options Aug 1, 2022
@Sculas Sculas merged commit fbb09f3 into main Aug 1, 2022
@Sculas Sculas deleted the feat/patch-options branch August 1, 2022 22:31
github-actions bot pushed a commit that referenced this pull request Aug 1, 2022
# [2.8.0](v2.7.0...v2.8.0) (2022-08-01)

### Bug Fixes

* remove requirement for solution [skip ci] ([#80](#80)) ([9a4d30e](9a4d30e))

### Features

* patch options ([#81](#81)) ([fbb09f3](fbb09f3))
@github-actions
Copy link
Contributor

github-actions bot commented Aug 1, 2022

🎉 This PR is included in version 2.8.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

github-actions bot pushed a commit to KiyuM1n/revanced-patcher that referenced this pull request Aug 23, 2022
# 1.0.0 (2022-08-23)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/Sean1781031/revanced-patcher/issues/46)) ([34f607a](34f607a))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/Sean1781031/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/Sean1781031/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/Sean1781031/revanced-patcher/issues/64)) ([482af78](482af78))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/Sean1781031/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/Sean1781031/revanced-patcher/issues/10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/Sean1781031/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/Sean1781031/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/Sean1781031/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add replace and remove extensions ([ReVanced#50](https://github.com/Sean1781031/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/Sean1781031/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/Sean1781031/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* simplify adding instructions ([e47b67d](e47b67d))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/Sean1781031/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))

### BREAKING CHANGES

* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to 5ee1e/revanced-patcher that referenced this pull request Aug 27, 2022
# 1.0.0 (2022-08-27)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/5ee1e/revanced-patcher/issues/46)) ([34f607a](34f607a))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/5ee1e/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/5ee1e/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/5ee1e/revanced-patcher/issues/64)) ([482af78](482af78))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/5ee1e/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/5ee1e/revanced-patcher/issues/10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/5ee1e/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/5ee1e/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/5ee1e/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add replace and remove extensions ([ReVanced#50](https://github.com/5ee1e/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/5ee1e/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/5ee1e/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* simplify adding instructions ([e47b67d](e47b67d))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/5ee1e/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))

### BREAKING CHANGES

* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to djvk87/revanced-patcher that referenced this pull request Aug 28, 2022
# 1.0.0 (2022-08-28)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/djvk87/revanced-patcher/issues/46)) ([34f607a](34f607a))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/djvk87/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/djvk87/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/djvk87/revanced-patcher/issues/64)) ([482af78](482af78))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/djvk87/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/djvk87/revanced-patcher/issues/10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/djvk87/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/djvk87/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/djvk87/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add replace and remove extensions ([ReVanced#50](https://github.com/djvk87/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/djvk87/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/djvk87/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* simplify adding instructions ([e47b67d](e47b67d))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/djvk87/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))

### BREAKING CHANGES

* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to Thuyen21/revanced-patcher that referenced this pull request Sep 1, 2022
# 1.0.0 (2022-09-01)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/Thuyen21/revanced-patcher/issues/46)) ([34f607a](34f607a))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/Thuyen21/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/Thuyen21/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/Thuyen21/revanced-patcher/issues/64)) ([482af78](482af78))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/Thuyen21/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/Thuyen21/revanced-patcher/issues/10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/Thuyen21/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/Thuyen21/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/Thuyen21/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add replace and remove extensions ([ReVanced#50](https://github.com/Thuyen21/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/Thuyen21/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/Thuyen21/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* simplify adding instructions ([e47b67d](e47b67d))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/Thuyen21/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))

### BREAKING CHANGES

* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to dennyxbox890/revanced-patcher that referenced this pull request Sep 6, 2022
# 1.0.0 (2022-09-06)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/dennyxbox890/revanced-patcher/issues/46)) ([34f607a](34f607a))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/dennyxbox890/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/dennyxbox890/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/dennyxbox890/revanced-patcher/issues/64)) ([482af78](482af78))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/dennyxbox890/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/dennyxbox890/revanced-patcher/issues/10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/dennyxbox890/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/dennyxbox890/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/dennyxbox890/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add replace and remove extensions ([ReVanced#50](https://github.com/dennyxbox890/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/dennyxbox890/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/dennyxbox890/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* simplify adding instructions ([e47b67d](e47b67d))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/dennyxbox890/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))

### BREAKING CHANGES

* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to yuchi0531/revanced-patcher that referenced this pull request Sep 22, 2022
# 1.0.0 (2022-09-22)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/yuchi0531/revanced-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/yuchi0531/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/yuchi0531/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/yuchi0531/revanced-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/yuchi0531/revanced-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/yuchi0531/revanced-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/yuchi0531/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/yuchi0531/revanced-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/yuchi0531/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/yuchi0531/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/yuchi0531/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/yuchi0531/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/yuchi0531/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/yuchi0531/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/yuchi0531/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/yuchi0531/revanced-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to ThexXTURBOXx/revanced-patcher that referenced this pull request Nov 5, 2022
# 1.0.0 (2022-11-05)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/ThexXTURBOXx/revanced-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/ThexXTURBOXx/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/ThexXTURBOXx/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/ThexXTURBOXx/revanced-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/ThexXTURBOXx/revanced-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/ThexXTURBOXx/revanced-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/ThexXTURBOXx/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/ThexXTURBOXx/revanced-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/ThexXTURBOXx/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* update workflow actions ([20caab2](20caab2))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/ThexXTURBOXx/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/ThexXTURBOXx/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/ThexXTURBOXx/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/ThexXTURBOXx/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/ThexXTURBOXx/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/ThexXTURBOXx/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/ThexXTURBOXx/revanced-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to tathaha/revanced-patcher that referenced this pull request Dec 13, 2022
# 1.0.0 (2022-12-13)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/tathaha/revanced-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/tathaha/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/tathaha/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/tathaha/revanced-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/tathaha/revanced-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/tathaha/revanced-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/tathaha/revanced-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/tathaha/revanced-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/tathaha/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/tathaha/revanced-patcher/issues/111)) ([f9bc95f](f9bc95f))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/tathaha/revanced-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/tathaha/revanced-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/tathaha/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* merge classes on addition ([ReVanced#127](https://github.com/tathaha/revanced-patcher/issues/127)) ([a925650](a925650))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/tathaha/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/tathaha/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/tathaha/revanced-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/tathaha/revanced-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/tathaha/revanced-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to bogadana/ravanched-patcher that referenced this pull request Dec 16, 2022
# [2.0.0](v1.10.2...v2.0.0) (2022-12-16)

### Bug Fixes

* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* add tests for PathOption ([d6308e1](d6308e1))
* broken deprecation message ([62aa295](62aa295))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* close open files ([ReVanced#75](https://github.com/bogadana/revanced-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/bogadana/revanced-patcher/issues/101)) ([085a3a4](085a3a4))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* handle null properly ([ReVanced#64](https://github.com/bogadana/revanced-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/revanced-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* make patcher version public ([76c45dd](76c45dd))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* only run list option check if not null ([4055939](4055939))
* PathOption should be open, not sealed ([a562e47](a562e47))
* publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/revanced-patcher/issues/137)) ([9ec720e](9ec720e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/revanced-patcher/issues/111)) ([f9bc95f](f9bc95f))
* revert soft dependencies ([7b2d058](7b2d058))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* typo in ListOption ([3921648](3921648))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* merge classes on addition ([ReVanced#127](https://github.com/bogadana/revanced-patcher/issues/127)) ([a925650](a925650))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/revanced-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* patch options ([ReVanced#81](https://github.com/bogadana/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* registry for patch options ([2431785](2431785))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/revanced-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* validator for patch options ([4e2e772](4e2e772))

### Performance Improvements

* decode resources only when necessary ([3ba4be2](3ba4be2))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* make exception an object ([75d2be8](75d2be8))

### Reverts

* revert breaking changes ([ReVanced#106](https://github.com/bogadana/revanced-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
github-actions bot pushed a commit to bogadana/ravanched-patcher that referenced this pull request Dec 16, 2022
# 1.0.0 (2022-12-16)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/bogadana/ravanched-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/bogadana/ravanched-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/bogadana/ravanched-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/bogadana/ravanched-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/bogadana/ravanched-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/ravanched-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/bogadana/ravanched-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/bogadana/ravanched-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/ravanched-patcher/issues/137)) ([9ec720e](9ec720e))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/ravanched-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/ravanched-patcher/issues/111)) ([f9bc95f](f9bc95f))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/bogadana/ravanched-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/bogadana/ravanched-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/ravanched-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* merge classes on addition ([ReVanced#127](https://github.com/bogadana/ravanched-patcher/issues/127)) ([a925650](a925650))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/ravanched-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/bogadana/ravanched-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/ravanched-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/bogadana/ravanched-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/bogadana/ravanched-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to bogadana/ravanched-patcher that referenced this pull request Dec 16, 2022
# 1.0.0 (2022-12-16)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/bogadana/ravanched-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/bogadana/ravanched-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/bogadana/ravanched-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/bogadana/ravanched-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/bogadana/ravanched-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/ravanched-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/bogadana/ravanched-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/bogadana/ravanched-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/ravanched-patcher/issues/137)) ([9ec720e](9ec720e))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/ravanched-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/ravanched-patcher/issues/111)) ([f9bc95f](f9bc95f))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/bogadana/ravanched-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/bogadana/ravanched-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/ravanched-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* merge classes on addition ([ReVanced#127](https://github.com/bogadana/ravanched-patcher/issues/127)) ([a925650](a925650))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/ravanched-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/bogadana/ravanched-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/ravanched-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/bogadana/ravanched-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/bogadana/ravanched-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to bogadana/ravanched-patcher that referenced this pull request Dec 16, 2022
# 1.0.0 (2022-12-16)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/bogadana/ravanched-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/bogadana/ravanched-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/bogadana/ravanched-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/bogadana/ravanched-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/bogadana/ravanched-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/ravanched-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/bogadana/ravanched-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/bogadana/ravanched-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/ravanched-patcher/issues/137)) ([9ec720e](9ec720e))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/ravanched-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/ravanched-patcher/issues/111)) ([f9bc95f](f9bc95f))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/bogadana/ravanched-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/bogadana/ravanched-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/ravanched-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* merge classes on addition ([ReVanced#127](https://github.com/bogadana/ravanched-patcher/issues/127)) ([a925650](a925650))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/ravanched-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/bogadana/ravanched-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/ravanched-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/bogadana/ravanched-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/bogadana/ravanched-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
github-actions bot pushed a commit to bogadana/ravanched-patcher that referenced this pull request Dec 18, 2022
# 1.0.0-dev.1 (2022-12-18)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `InlineSmaliCompiler.compile` using 0 registers instead of 1 by default ([835a421](835a421))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* `String.toInstructions` defaulting `forStaticMethod` to `false` ([5a2f02b](5a2f02b)), closes [ReVanced/revanced-patches#46](ReVanced/revanced-patches#46)
* add docs (trigger release) ([6628b78](6628b78))
* add execute permission to `./gradlew` file ([ReVanced#46](https://github.com/bogadana/ravanched-patcher/issues/46)) ([34f607a](34f607a))
* add tests for PathOption ([d6308e1](d6308e1))
* adding existing classes to the patchers cache ([9659a61](9659a61))
* always return PatchResultSuccess on patch success ([996c4ac](996c4ac))
* applying no patches throwing error ([5ca5a1c](5ca5a1c))
* applyPatches not returning successful patches ([f806cb3](f806cb3))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/bogadana/ravanched-patcher/issues/1)) ([d5a3c76](d5a3c76))
* broken deprecation message ([62aa295](62aa295))
* callback for each file instead of class ([930768d](930768d))
* callback only when inteded ([e3bf367](e3bf367))
* check dependencies for resource patches ([9c07ffc](9c07ffc))
* check if patch option requirement is met ([14a73bf](14a73bf))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* close open files ([ReVanced#75](https://github.com/bogadana/ravanched-patcher/issues/75)) ([123ad54](123ad54))
* close stream when closing `DomFileEditor` ([77604d4](77604d4))
* compare any methods parameters ([ReVanced#101](https://github.com/bogadana/ravanched-patcher/issues/101)) ([085a3a4](085a3a4))
* current must be calculated after increment ([5f12bab](5f12bab))
* dexlib must be propagated ([b738dcd](b738dcd))
* DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9))
* enforce aapt v2 ([b68b0bf](b68b0bf))
* failing tests temporarily ([fc05fe7](fc05fe7))
* fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0))
* **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e))
* fix classes having multiple instances of fields ([7cc8a7d](7cc8a7d))
* fix classes having multiple method instances ([398239d](398239d))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([e6c2501](e6c2501))
* fuzzy resolver warning params were turned around ([e5bea06](e5bea06))
* give ClassWriter a ClassReader for symtable ([41749ba](41749ba))
* goodbye security ([8f3ac77](8f3ac77))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* handle null properly ([ReVanced#64](https://github.com/bogadana/ravanched-patcher/issues/64)) ([482af78](482af78))
* handle option types and nulls properly ([aff4968](aff4968))
* handle private companion objects ([ad3d332](ad3d332))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/ravanched-patcher/issues/98)
* invalid types for example options ([79f91e0](79f91e0))
* invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/bogadana/ravanched-patcher/issues/8)) ([310a7c4](310a7c4))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([4e56652](4e56652))
* make patcher version public ([76c45dd](76c45dd))
* make warnings nullable instead of lateinit ([8f1a629](8f1a629))
* match to correct signature method parameters ([1ee2e4b](1ee2e4b))
* **MethodResolver:** fix cd57a8c ([cbd8df2](cbd8df2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([699c730](699c730))
* **MethodResolver:** strip labels nodes so opcode patterns match ([82c5306](82c5306))
* MethodSignature#resolved throwing an exception ([c612676](c612676))
* missing additional items [skip ci] ([0ebab8b](0ebab8b))
* more useful error message ([4b2e323](4b2e323))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* mutability of local variable `modified` ([0e87ef5](0e87ef5))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([ReVanced#10](https://github.com/bogadana/ravanched-patcher/issues/10)) ([674461f](674461f))
* only run list option check if not null ([4055939](4055939))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* Patcher setting BuildOptions too late ([6a5c873](6a5c873))
* PathOption should be open, not sealed ([a562e47](a562e47))
* publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/ravanched-patcher/issues/137)) ([9ec720e](9ec720e))
* qualifying `Element` with wrong package ([024fa86](024fa86))
* reaching all constructors not possible ([c459beb](c459beb))
* reformat (trigger release) ([bf48945](bf48945))
* remove broken code ([0e72a6e](0e72a6e))
* remove default param from Package.versions ([4b81318](4b81318))
* remove dependency to fork of Apktool ([11abc67](11abc67))
* remove javadoc jar (also trigger release) ([56f6ca3](56f6ca3))
* remove leftover debug code ([0f30eac](0f30eac))
* remove repeatable from PatchDeprecated ([6e73631](6e73631))
* remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/ravanched-patcher/issues/80)) ([9a4d30e](9a4d30e))
* remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/ravanched-patcher/issues/111)) ([f9bc95f](f9bc95f))
* resource patcher ([31815ca](31815ca))
* return mutable set of classes ([66a9b76](66a9b76))
* return resourceFile to caller ([1f75777](1f75777))
* returning failure on success ([48c4ea2](48c4ea2))
* revert soft dependencies ([7b2d058](7b2d058))
* Search method map for existing class proxy ([a1e909b](a1e909b))
* set index for insertAt to 0 by default ([d5b4c99](d5b4c99))
* set marklimit to Integer.MAX_VALUE ([e6e468f](e6e468f))
* show error message if cause is null ([f9da2ad](f9da2ad))
* show error message instead of `null` ([8d95b14](8d95b14))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* typo in ListOption ([3921648](3921648))
* update apktool ([ab866bb](ab866bb))
* update apktool ([051afd9](051afd9))
* update apktool to fork ([566ecef](566ecef))
* use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4))
* use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* version not working with apktool due to cache ([03f5ee0](03f5ee0))
* workflow on dev branch ([428f7f4](428f7f4))
* write all classes ([f068fc8](f068fc8))
* wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([a6c6b49](a6c6b49))
* Change all references from Array to Iterable ([72f3cad](72f3cad))
* convert Patch to abstract class ([cb9b1b9](cb9b1b9))
* Improve Patch Options ([6b909c1](6b909c1))
* improve structuring of classes and their implementations ([4aa14bb](4aa14bb))
* migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1))
* Optimize Signature class ([ReVanced#11](https://github.com/bogadana/ravanched-patcher/issues/11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

* refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8))
* feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28))

### Features

* `Closeable` patches ([bbd40bf](bbd40bf))
* `Dependencies` annotation ([893d4c6](893d4c6))
* `parametersCount` for `InlineSmaliCompiler` instead of `parameters` ([ad6c5c8](ad6c5c8))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/bogadana/ravanched-patcher/issues/4)) ([bbb2c54](bbb2c54))
* add `MethodWalker` ([7755bbc](7755bbc))
* add `p` naming scheme to smali compiler ([79909cf](79909cf))
* add extensions for cloning methods ([01bfbd6](01bfbd6))
* add findClass method with className ([4087f49](4087f49))
* Add first tests ([544bcf7](544bcf7))
* add fuzzy resolver ([7a56dca](7a56dca))
* add getValue & setValue for PatchOption ([2572cd0](2572cd0))
* add immutableMethod ([c63b20f](c63b20f))
* add inline smali compiler ([bfe4e3e](bfe4e3e))
* add missing test for fields ([6b8b057](6b8b057))
* add or extension for AccessFlags ([00c85b5](00c85b5))
* Add patch metadata ([642e903](642e903)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add Patch#dependsOn extension ([523f67b](523f67b))
* add PathOption back ([172655b](172655b))
* add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/ravanched-patcher/issues/50)) ([92ac5e4](92ac5e4))
* add SafeClassWriter ([6626014](6626014))
* Add warnings for Fuzzy resolver ([715a2ad](715a2ad))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([1db735b](1db735b))
* allow custom aapt path to be specified ([8eb4a8f](8eb4a8f))
* allow custom framework path to be specified ([d3a580e](d3a580e))
* Allow unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* apply changes from ReVanced Patcher ([ba9d998](ba9d998))
* default value for `Package.versions` annotation parameter ([131dedd](131dedd))
* deprecation for patches ([80c2e80](80c2e80))
* exclusive mutable access to files ([814ce0b](814ce0b))
* feature request issue template ([1b39278](1b39278))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* improve logging ([c20dfe1](c20dfe1))
* Improve Smali Compiler ([6bfe571](6bfe571))
* improved Patch Options ([e722e3f](e722e3f))
* issue templates [skip ci] ([112bc99](112bc99))
* log failed patches due to failed dependencies ([a467fbb](a467fbb))
* logging class ([caf2745](caf2745))
* merge classes on addition ([ReVanced#127](https://github.com/bogadana/ravanched-patcher/issues/127)) ([a925650](a925650))
* migrate logger to `slf4j` ([8f66f9f](8f66f9f))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([8615798](8615798))
* migrate to dexlib ([3651981](3651981))
* Minor refactor and return proxy, if class has been proxied already ([4b26305](4b26305))
* nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/ravanched-patcher/issues/59)) ([4ea030d](4ea030d))
* nullable parameters ([7882a8d](7882a8d))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* patch options ([ReVanced#81](https://github.com/bogadana/ravanched-patcher/issues/81)) ([fbb09f3](fbb09f3))
* PatchOptions#nullify to nullify an option ([371f0c4](371f0c4))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* registry for patch options ([2431785](2431785))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* remove deprecated functions ([ada5a03](ada5a03))
* remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8))
* remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0))
* remove unused extension `dependsOn` ([797286b](797286b))
* remove unused patch extensions ([5583904](5583904))
* return a `File` instance instead of `ExtFile` ([68174bb](68174bb))
* RwLock for opening files in `DomFileEditor` ([db4348c](db4348c))
* section `acknowledgements` for issue templates ([a0cb449](a0cb449))
* simplify adding instructions ([e47b67d](e47b67d))
* SincePatcher annotation ([25f74dc](25f74dc))
* Soft Dependencies for Patches ([8c12f8d](8c12f8d))
* sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/ravanched-patcher/issues/125)
* streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c))
* string signature ([ReVanced#22](https://github.com/bogadana/ravanched-patcher/issues/22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* use streams to write the dex files ([64bae88](64bae88))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))
* validator for patch options ([4e2e772](4e2e772))
* yield the patch result ([dde5385](dde5385))

### Performance Improvements

* check type instead of class ([c7ef264](c7ef264))
* decode manifest only when not using resource patcher ([4f60bea](4f60bea))
* decode resources only when necessary ([3ba4be2](3ba4be2))
* depend on `androlib` instead of `ApkDecoder` ([cc9416d](cc9416d))
* do not resolve empty signatures list ([b1eebc9](b1eebc9))
* **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb))
* lazy-ify all mutable clones ([d18a3b6](d18a3b6))
* make exception an object ([75d2be8](75d2be8))
* optimize indexOf call away ([9991f39](9991f39))
* use Set instead of List since there are no dupes ([e65ebd2](e65ebd2))
* use String List and compare instead of any lambda ([5bd416b](5bd416b))

### Reverts

* "fix: enforce aapt v1" ([dfd8a24](dfd8a24))
* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))
* propagate dependencies ([365e1d7](365e1d7))
* revert breaking changes ([ReVanced#106](https://github.com/bogadana/ravanched-patcher/issues/106)) ([124332f](124332f))

### BREAKING CHANGES

* various changes in which packages classes previously where and their implementation
* These extensions do not exist anymore and any use should be removed
* The extension does not exist anymore and any use should be removed
* The annotation does not exist anymore and any use should be removed
* Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`.

Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
* Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works.
* Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API.
* Not backwards compatible, since a lot of classes where renamed.
* arrayOf has to be changed to listOf.
* Method signature of Patcher#save() was changed to comply with the changes of multidexlib2.
* Removed usage of ASM library
* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
* Method signature of execute() was changed to include the cache, this will break existing implementations of the Patch class.
* Patch class is now an abstract class. You must implement it. You can use anonymous implements, like done in the tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Patch Options
1 participant