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

fix(Io): JAR loading and saving #8

Merged
merged 10 commits into from
Mar 21, 2022
Merged

fix(Io): JAR loading and saving #8

merged 10 commits into from
Mar 21, 2022

Conversation

oSumAtrIX
Copy link
Member

This PR addresses issue #5 and continues PR #7.

Io will now be instantiated with both, input as well as an output stream alongside a mutable class list:
https://github.com/ReVancedTeam/revanced-patcher/blob/0f3db838a05fb376fe974b4a1bb3292888f8c5a0/src/main/kotlin/net/revanced/patcher/util/Io.kt#L13-L17

The streams are used until we call saveAsJar. The original streams will be closed:
https://github.com/ReVancedTeam/revanced-patcher/blob/0f3db838a05fb376fe974b4a1bb3292888f8c5a0/src/main/kotlin/net/revanced/patcher/util/Io.kt#L86-L90

When writing, the input stream will be proxied through a BufferedInputStream a second time, all classes will be merged with all non-class file zip entries and written into the output stream:
https://github.com/ReVancedTeam/revanced-patcher/blob/0f3db838a05fb376fe974b4a1bb3292888f8c5a0/src/main/kotlin/net/revanced/patcher/util/Io.kt#L56-L84

All tests and usages in the patcher have been adjusted accordingly.

@oSumAtrIX oSumAtrIX requested a review from Sculas March 21, 2022 04:14
@oSumAtrIX oSumAtrIX changed the title Fix Io Rewrite Io Mar 21, 2022
@oSumAtrIX oSumAtrIX self-assigned this Mar 21, 2022
@oSumAtrIX oSumAtrIX changed the title Rewrite Io feat: rewrite Io Mar 21, 2022
@oSumAtrIX oSumAtrIX changed the title feat: rewrite Io feat: rewrite Io Mar 21, 2022
Copy link
Contributor

@Sculas Sculas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

src/test/kotlin/net/revanced/patcher/ReaderTest.kt Outdated Show resolved Hide resolved
src/test/kotlin/net/revanced/patcher/ReaderTest.kt Outdated Show resolved Hide resolved
src/test/kotlin/net/revanced/patcher/ReaderTest.kt Outdated Show resolved Hide resolved
src/test/kotlin/net/revanced/patcher/PatcherTest.kt Outdated Show resolved Hide resolved
src/main/kotlin/net/revanced/patcher/util/Io.kt Outdated Show resolved Hide resolved
src/main/kotlin/net/revanced/patcher/util/Io.kt Outdated Show resolved Hide resolved
src/main/kotlin/net/revanced/patcher/util/Io.kt Outdated Show resolved Hide resolved
@Sculas Sculas changed the title feat: rewrite Io refactor(Io): rewrite JAR loading and saving Mar 21, 2022
@Sculas Sculas changed the title refactor(Io): rewrite JAR loading and saving fix(Io): JAR loading and saving Mar 21, 2022
@Sculas
Copy link
Contributor

Sculas commented Mar 21, 2022

Don't worry about commit messages btw (^), I'll squash this PR after.

@Sculas Sculas linked an issue Mar 21, 2022 that may be closed by this pull request
@Sculas Sculas merged commit 834b427 into dev Mar 21, 2022
@Sculas Sculas deleted the fix-io branch March 21, 2022 17:48
github-actions bot pushed a commit that referenced this pull request Mar 21, 2022
# [1.0.0-dev.9](v1.0.0-dev.8...v1.0.0-dev.9) (2022-03-21)

### Bug Fixes

* **Io:** JAR loading and saving ([#8](#8)) ([834b427](834b427))
@github-actions
Copy link
Contributor

🎉 This PR is included in version 1.0.0-dev.9 🎉

The release is available on:

Your semantic-release bot 📦🚀

oSumAtrIX added a commit that referenced this pull request Mar 21, 2022
* refactor: Complete rewrite of `Io`

* style: format code

* style: rewrite todos

* fix: use lateinit instead of nonnull assert for zipEntry

* fix: use lateinit instead of nonnull assert for jarEntry & reuse zipEntry

* docs: add docs to `Patcher`

* test: match output of patcher

* chore: add todo to `Io` for removing non-class files

Co-authored-by: Sculas <contact@sculas.xyz>
oSumAtrIX pushed a commit that referenced this pull request Mar 21, 2022
# [1.0.0-dev.9](v1.0.0-dev.8...v1.0.0-dev.9) (2022-03-21)

### Bug Fixes

* **Io:** JAR loading and saving ([#8](#8)) ([834b427](834b427))
github-actions bot pushed a commit that referenced this pull request Mar 22, 2022
# [1.0.0-dev.5](v1.0.0-dev.4...v1.0.0-dev.5) (2022-03-22)

### Bug Fixes

* **gradle:** publish source and javadocs ([2135860](2135860))
* **Io:** fix finding classes by name ([b4e8ccb](b4e8ccb))
* **Io:** JAR loading and saving ([#8](#8)) ([2dc70b5](2dc70b5))
* nullable signature members ([#10](#10)) ([b2ea82a](b2ea82a))

### Code Refactoring

* Optimize Signature class ([#11](#11)) ([fe69afe](fe69afe))
* Rename `net.revanced` to `app.revanced` ([4fea658](4fea658))

### Features

* Add `findParentMethod` utility method ([#4](#4)) ([2cff30e](2cff30e))

### BREAKING CHANGES

* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
Sculas added a commit that referenced this pull request Mar 23, 2022
* refactor: Complete rewrite of `Io`

* style: format code

* style: rewrite todos

* fix: use lateinit instead of nonnull assert for zipEntry

* fix: use lateinit instead of nonnull assert for jarEntry & reuse zipEntry

* docs: add docs to `Patcher`

* test: match output of patcher

* chore: add todo to `Io` for removing non-class files

Co-authored-by: Sculas <contact@sculas.xyz>
Sculas pushed a commit that referenced this pull request Mar 23, 2022
# [1.0.0-dev.9](v1.0.0-dev.8...v1.0.0-dev.9) (2022-03-21)

### Bug Fixes

* **Io:** JAR loading and saving ([#8](#8)) ([834b427](834b427))
github-actions bot pushed a commit that referenced this pull request Mar 23, 2022
# [1.0.0-dev.12](v1.0.0-dev.11...v1.0.0-dev.12) (2022-03-23)

### Bug Fixes

* **gradle:** publish source and javadocs ([52e9436](52e9436))
* **Io:** JAR loading and saving ([#8](#8)) ([d75df1a](d75df1a))
* nullable signature members ([#10](#10)) ([eebfbd5](eebfbd5))
* update readme ([4da8baf](4da8baf))

### Code Refactoring

* Rename `net.revanced` to `app.revanced` ([4e048f5](4e048f5))

### Features

* Add `findParentMethod` utility method ([#4](#4)) ([00cb98a](00cb98a))

### BREAKING CHANGES

* Package name was changed from "net.revanced" to "app.revanced"
she11sh0cked pushed a commit that referenced this pull request Mar 23, 2022
* refactor: Complete rewrite of `Io`

* style: format code

* style: rewrite todos

* fix: use lateinit instead of nonnull assert for zipEntry

* fix: use lateinit instead of nonnull assert for jarEntry & reuse zipEntry

* docs: add docs to `Patcher`

* test: match output of patcher

* chore: add todo to `Io` for removing non-class files

Co-authored-by: Sculas <contact@sculas.xyz>
she11sh0cked pushed a commit that referenced this pull request Mar 23, 2022
# [1.0.0-dev.9](v1.0.0-dev.8...v1.0.0-dev.9) (2022-03-21)

### Bug Fixes

* **Io:** JAR loading and saving ([#8](#8)) ([834b427](834b427))
github-actions bot pushed a commit that referenced this pull request Mar 23, 2022
# [1.0.0-dev.5](v1.0.0-dev.4...v1.0.0-dev.5) (2022-03-23)

### Bug Fixes

* **gradle:** publish source and javadocs ([5bfda52](5bfda52))
* **Io:** fix finding classes by name ([01379d4](01379d4))
* **Io:** JAR loading and saving ([#8](#8)) ([32e190d](32e190d))
* nullable signature members ([#10](#10)) ([0c24a7a](0c24a7a))

### Code Refactoring

* Optimize Signature class ([#11](#11)) ([41a2f30](41a2f30))
* Rename `net.revanced` to `app.revanced` ([d2d15a8](d2d15a8))

### Features

* Add `findParentMethod` utility method ([#4](#4)) ([ec84df7](ec84df7))

### BREAKING CHANGES

* Array<Int> was changed to IntArray. This breaks existing patches.
* Package name was changed from "net.revanced" to "app.revanced"
she11sh0cked pushed a commit that referenced this pull request Mar 23, 2022
* refactor: Complete rewrite of `Io`

* style: format code

* style: rewrite todos

* fix: use lateinit instead of nonnull assert for zipEntry

* fix: use lateinit instead of nonnull assert for jarEntry & reuse zipEntry

* docs: add docs to `Patcher`

* test: match output of patcher

* chore: add todo to `Io` for removing non-class files

Co-authored-by: Sculas <contact@sculas.xyz>
github-actions bot pushed a commit that referenced this pull request Mar 23, 2022
# 1.0.0-dev.1 (2022-03-23)

### Bug Fixes

* avoid ignoring test resources (fixes [#1](#1)) ([d5a3c76](d5a3c76))
* current must be calculated after increment ([5f12bab](5f12bab))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([#8](#8)) ([4d98cbc](4d98cbc))
* nullable signature members ([#10](#10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* remove broken code ([0e72a6e](0e72a6e))
* set index for insertAt to 0 by default ([1769132](1769132))
* workflow on dev branch ([7e67daf](7e67daf))

### Code Refactoring

* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([#11](#11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* Add `findParentMethod` utility method ([#4](#4)) ([00c6ab7](00c6ab7))

### BREAKING CHANGES

* 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 Optinux/revanced-patcher that referenced this pull request Mar 27, 2022
# 1.0.0-dev.1 (2022-03-27)

### Bug Fixes

* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/Optinux/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* current must be calculated after increment ([5f12bab](5f12bab))
* give ClassWriter a ClassReader for symtable ([e8f6973](e8f6973))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/Optinux/revanced-patcher/issues/8)) ([4d98cbc](4d98cbc))
* **MethodResolver:** fix cd57a8c ([1af31b2](1af31b2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([8d1bb5f](8d1bb5f))
* **MethodResolver:** strip labels nodes so opcode patterns match ([cd57a8c](cd57a8c))
* nullable signature members ([ReVanced#10](https://github.com/Optinux/revanced-patcher/issues/10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* remove broken code ([0e72a6e](0e72a6e))
* set index for insertAt to 0 by default ([1769132](1769132))
* set marklimit to Integer.MAX_VALUE ([ab6453c](ab6453c))
* workflow on dev branch ([7e67daf](7e67daf))

### Code Refactoring

* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([ReVanced#11](https://github.com/Optinux/revanced-patcher/issues/11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/Optinux/revanced-patcher/issues/4)) ([00c6ab7](00c6ab7))
* add SafeClassWriter ([ca6b94d](ca6b94d))

### Performance Improvements

* check type instead of class ([47eb493](47eb493))

### BREAKING CHANGES

* 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 sudevn/revanced-patcher that referenced this pull request Apr 26, 2022
# 1.0.0 (2022-04-26)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([5ae5e98](5ae5e98))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([bfeeaf4](bfeeaf4))
* `PackageMetadata` ([305a817](305a817))
* `replaceWith` not replacing classes with used class proxies ([f0f3403](f0f3403))
* adding existing classes to the patchers cache ([4281546](4281546))
* always return PatchResultSuccess on patch success ([866b03a](866b03a))
* applying no patches throwing error ([f88c118](f88c118))
* applyPatches not returning successful patches ([8b70bb4](8b70bb4))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/sudevn/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* Classes not being written properly because of array shifting ([1471956](1471956))
* current must be calculated after increment ([5f12bab](5f12bab))
* fix classes having multiple instances of fields ([b711b80](b711b80))
* fix classes having multiple method instances ([12c10d8](12c10d8))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([bb42fa3](bb42fa3))
* fuzzy resolver warning params were turned around ([d49df10](d49df10))
* give ClassWriter a ClassReader for symtable ([e8f6973](e8f6973))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* incorrect pattern offset ([03700ff](03700ff))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/sudevn/revanced-patcher/issues/8)) ([4d98cbc](4d98cbc))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([864e38c](864e38c))
* make warnings nullable instead of lateinit ([04b49b8](04b49b8))
* match to correct signature method parameters ([c49071a](c49071a))
* **MethodResolver:** fix cd57a8c ([1af31b2](1af31b2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([8d1bb5f](8d1bb5f))
* **MethodResolver:** strip labels nodes so opcode patterns match ([cd57a8c](cd57a8c))
* MethodSignature#resolved throwing an exception ([82b1e66](82b1e66))
* Move proxy package out of cache package ([6bc4e7e](6bc4e7e))
* null check causing an exception ([560c485](560c485))
* nullable signature members ([ReVanced#10](https://github.com/sudevn/revanced-patcher/issues/10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* Patcher not writing resolved methods ([d15240d](d15240d))
* remove broken code ([0e72a6e](0e72a6e))
* remove leftover debug code ([4458141](4458141))
* return mutable set of classes ([84bc7e0](84bc7e0))
* returning failure on success ([3b68d5c](3b68d5c))
* Search method map for existing class proxy ([d5e694c](d5e694c))
* set index for insertAt to 0 by default ([1769132](1769132))
* set marklimit to Integer.MAX_VALUE ([ab6453c](ab6453c))
* string signature in `SignatureResolver` ([ac36d19](ac36d19))
* Suppress unused for addFiles ([a0d6d46](a0d6d46))
* throwing in case the opcode patterns do not match ([f72dd68](f72dd68))
* use Array instead of Iterable for methodParameters ([312235b](312235b))
* workflow on dev branch ([7e67daf](7e67daf))
* write all classes ([6ad51aa](6ad51aa))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([32e6458](32e6458))
* Change all references from Array to Iterable ([264989f](264989f))
* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([ReVanced#11](https://github.com/sudevn/revanced-patcher/issues/11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/sudevn/revanced-patcher/issues/4)) ([00c6ab7](00c6ab7))
* add `MethodWalker` ([659e108](659e108))
* add extensions for cloning methods ([df7503b](df7503b))
* add findClass method with className ([78235d1](78235d1))
* Add first tests ([6767c8f](6767c8f))
* add fuzzy resolver ([a492808](a492808))
* add immutableMethod ([eed1cfd](eed1cfd))
* add inline smali compiler ([dbafe2a](dbafe2a))
* add missing test for fields ([4022b8b](4022b8b))
* add or extension for AccessFlags ([aec5eeb](aec5eeb))
* Add patch metadata ([8544fc4](8544fc4)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add SafeClassWriter ([ca6b94d](ca6b94d))
* Add warnings for Fuzzy resolver ([643a14e](643a14e))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([5f71a34](5f71a34))
* Allow unknown opcodes using `null` ([f4a47d4](f4a47d4))
* Finish first patcher test ([a9e4e8a](a9e4e8a))
* Improve `SignatureResolver` ([88a6a27](88a6a27))
* migrate to dexlib ([be51f42](be51f42))
* Minor refactor and return proxy, if class has been proxied already ([2d3c611](2d3c611))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([2319787](2319787))
* remaining mutable `EncodedValue` classes ([7d38bb0](7d38bb0))
* string signature ([ReVanced#22](https://github.com/sudevn/revanced-patcher/issues/22)) ([c245edb](c245edb))

### Performance Improvements

* check type instead of class ([47eb493](47eb493))
* do not resolve empty signatures list ([1f7bf3a](1f7bf3a))
* lazy-ify all mutable clones ([05e4400](05e4400))
* optimize indexOf call away ([f8e978a](f8e978a))
* use Set instead of List since there are no dupes ([6221387](6221387))
* use String List and compare instead of any lambda ([aed4fd9](aed4fd9))

### Reverts

* AccessFlag extensions not working with IDE ([e161f7f](e161f7f))
* previous commits check for dupes in dexFile, not cache ([433914f](433914f))

### BREAKING CHANGES

* 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 sudevn/revanced-patcher that referenced this pull request Apr 26, 2022
# 1.0.0 (2022-04-26)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([5ae5e98](5ae5e98))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([bfeeaf4](bfeeaf4))
* `PackageMetadata` ([305a817](305a817))
* `replaceWith` not replacing classes with used class proxies ([f0f3403](f0f3403))
* adding existing classes to the patchers cache ([4281546](4281546))
* always return PatchResultSuccess on patch success ([866b03a](866b03a))
* applying no patches throwing error ([f88c118](f88c118))
* applyPatches not returning successful patches ([8b70bb4](8b70bb4))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/sudevn/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* Classes not being written properly because of array shifting ([1471956](1471956))
* current must be calculated after increment ([5f12bab](5f12bab))
* fix classes having multiple instances of fields ([b711b80](b711b80))
* fix classes having multiple method instances ([12c10d8](12c10d8))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([bb42fa3](bb42fa3))
* fuzzy resolver warning params were turned around ([d49df10](d49df10))
* give ClassWriter a ClassReader for symtable ([e8f6973](e8f6973))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* incorrect pattern offset ([03700ff](03700ff))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/sudevn/revanced-patcher/issues/8)) ([4d98cbc](4d98cbc))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([864e38c](864e38c))
* make warnings nullable instead of lateinit ([04b49b8](04b49b8))
* match to correct signature method parameters ([c49071a](c49071a))
* **MethodResolver:** fix cd57a8c ([1af31b2](1af31b2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([8d1bb5f](8d1bb5f))
* **MethodResolver:** strip labels nodes so opcode patterns match ([cd57a8c](cd57a8c))
* MethodSignature#resolved throwing an exception ([82b1e66](82b1e66))
* Move proxy package out of cache package ([6bc4e7e](6bc4e7e))
* null check causing an exception ([560c485](560c485))
* nullable signature members ([ReVanced#10](https://github.com/sudevn/revanced-patcher/issues/10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* Patcher not writing resolved methods ([d15240d](d15240d))
* remove broken code ([0e72a6e](0e72a6e))
* remove leftover debug code ([4458141](4458141))
* return mutable set of classes ([84bc7e0](84bc7e0))
* returning failure on success ([3b68d5c](3b68d5c))
* Search method map for existing class proxy ([d5e694c](d5e694c))
* set index for insertAt to 0 by default ([1769132](1769132))
* set marklimit to Integer.MAX_VALUE ([ab6453c](ab6453c))
* string signature in `SignatureResolver` ([ac36d19](ac36d19))
* Suppress unused for addFiles ([a0d6d46](a0d6d46))
* throwing in case the opcode patterns do not match ([f72dd68](f72dd68))
* use Array instead of Iterable for methodParameters ([312235b](312235b))
* workflow on dev branch ([7e67daf](7e67daf))
* write all classes ([6ad51aa](6ad51aa))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([32e6458](32e6458))
* Change all references from Array to Iterable ([264989f](264989f))
* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([ReVanced#11](https://github.com/sudevn/revanced-patcher/issues/11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/sudevn/revanced-patcher/issues/4)) ([00c6ab7](00c6ab7))
* add `MethodWalker` ([659e108](659e108))
* add extensions for cloning methods ([df7503b](df7503b))
* add findClass method with className ([78235d1](78235d1))
* Add first tests ([6767c8f](6767c8f))
* add fuzzy resolver ([a492808](a492808))
* add immutableMethod ([eed1cfd](eed1cfd))
* add inline smali compiler ([dbafe2a](dbafe2a))
* add missing test for fields ([4022b8b](4022b8b))
* add or extension for AccessFlags ([aec5eeb](aec5eeb))
* Add patch metadata ([8544fc4](8544fc4)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add SafeClassWriter ([ca6b94d](ca6b94d))
* Add warnings for Fuzzy resolver ([643a14e](643a14e))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([5f71a34](5f71a34))
* Allow unknown opcodes using `null` ([f4a47d4](f4a47d4))
* Finish first patcher test ([a9e4e8a](a9e4e8a))
* Improve `SignatureResolver` ([88a6a27](88a6a27))
* migrate to dexlib ([be51f42](be51f42))
* Minor refactor and return proxy, if class has been proxied already ([2d3c611](2d3c611))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([2319787](2319787))
* remaining mutable `EncodedValue` classes ([7d38bb0](7d38bb0))
* string signature ([ReVanced#22](https://github.com/sudevn/revanced-patcher/issues/22)) ([c245edb](c245edb))

### Performance Improvements

* check type instead of class ([47eb493](47eb493))
* do not resolve empty signatures list ([1f7bf3a](1f7bf3a))
* lazy-ify all mutable clones ([05e4400](05e4400))
* optimize indexOf call away ([f8e978a](f8e978a))
* use Set instead of List since there are no dupes ([6221387](6221387))
* use String List and compare instead of any lambda ([aed4fd9](aed4fd9))

### Reverts

* AccessFlag extensions not working with IDE ([e161f7f](e161f7f))
* previous commits check for dupes in dexFile, not cache ([433914f](433914f))

### BREAKING CHANGES

* 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 gitcetra/revanced-patcher that referenced this pull request Jun 3, 2022
# 1.0.0-dev.1 (2022-06-03)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([5ae5e98](5ae5e98))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([bfeeaf4](bfeeaf4))
* `JarPatchBundle` loading non-class files to class loader ([3f0c740](3f0c740))
* `PackageMetadata` ([305a817](305a817))
* `replaceWith` not replacing classes with used class proxies ([f0f3403](f0f3403))
* adding existing classes to the patchers cache ([4281546](4281546))
* always return PatchResultSuccess on patch success ([866b03a](866b03a))
* applying no patches throwing error ([f88c118](f88c118))
* applyPatches not returning successful patches ([8b70bb4](8b70bb4))
* avoid ignoring test resources (fixes [ReVanced#1](https://github.com/gitcetra/revanced-patcher/issues/1)) ([d5a3c76](d5a3c76))
* Classes not being written properly because of array shifting ([1471956](1471956))
* current must be calculated after increment ([5f12bab](5f12bab))
* failing tests temporarily ([66b08f8](66b08f8))
* fix classes having multiple instances of fields ([b711b80](b711b80))
* fix classes having multiple method instances ([12c10d8](12c10d8))
* Fixed writer & signature resolver, improved tests & speed, minor refactoring ([bb42fa3](bb42fa3))
* fuzzy resolver warning params were turned around ([d49df10](d49df10))
* give ClassWriter a ClassReader for symtable ([e8f6973](e8f6973))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* incorrect pattern offset ([03700ff](03700ff))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([ReVanced#8](https://github.com/gitcetra/revanced-patcher/issues/8)) ([4d98cbc](4d98cbc))
* make `methodMetadata` nullable in `MethodSignatureMetadata` ([864e38c](864e38c))
* make warnings nullable instead of lateinit ([04b49b8](04b49b8))
* match to correct signature method parameters ([c49071a](c49071a))
* **MethodResolver:** fix cd57a8c ([1af31b2](1af31b2))
* **MethodResolver:** strip labels and line numbers so opcode patterns match ([8d1bb5f](8d1bb5f))
* **MethodResolver:** strip labels nodes so opcode patterns match ([cd57a8c](cd57a8c))
* MethodSignature#resolved throwing an exception ([82b1e66](82b1e66))
* Move proxy package out of cache package ([6bc4e7e](6bc4e7e))
* null check causing an exception ([560c485](560c485))
* nullable signature members ([ReVanced#10](https://github.com/gitcetra/revanced-patcher/issues/10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* Patcher not writing resolved methods ([d15240d](d15240d))
* qualifying `Element` with wrong package ([4d74de4](4d74de4))
* reaching all constructors not possible ([37fa994](37fa994))
* reformat (trigger release) ([45a167e](45a167e))
* remove broken code ([0e72a6e](0e72a6e))
* remove dependency to fork of Apktool ([0fa529f](0fa529f))
* remove leftover debug code ([4458141](4458141))
* return mutable set of classes ([84bc7e0](84bc7e0))
* returning failure on success ([3b68d5c](3b68d5c))
* Search method map for existing class proxy ([d5e694c](d5e694c))
* set index for insertAt to 0 by default ([1769132](1769132))
* set marklimit to Integer.MAX_VALUE ([ab6453c](ab6453c))
* string signature in `SignatureResolver` ([ac36d19](ac36d19))
* Suppress unused for addFiles ([a0d6d46](a0d6d46))
* throwing in case the opcode patterns do not match ([f72dd68](f72dd68))
* use Array instead of Iterable for methodParameters ([312235b](312235b))
* using old instance of `Androlib` when saving ([5630e49](5630e49))
* workflow on dev branch ([7e67daf](7e67daf))
* write all classes ([6ad51aa](6ad51aa))

### Code Refactoring

* bump multidexlib2 to 2.5.2.r2 ([32e6458](32e6458))
* Change all references from Array to Iterable ([264989f](264989f))
* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([ReVanced#11](https://github.com/gitcetra/revanced-patcher/issues/11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* `PatchLoader` ([1a99eca](1a99eca))
* Add `findParentMethod` utility method ([ReVanced#4](https://github.com/gitcetra/revanced-patcher/issues/4)) ([00c6ab7](00c6ab7))
* add `MethodWalker` ([659e108](659e108))
* add `p` naming scheme to smali compiler ([38556d6](38556d6))
* add extensions for cloning methods ([df7503b](df7503b))
* add findClass method with className ([78235d1](78235d1))
* Add first tests ([6767c8f](6767c8f))
* add fuzzy resolver ([a492808](a492808))
* add immutableMethod ([eed1cfd](eed1cfd))
* add inline smali compiler ([dbafe2a](dbafe2a))
* add missing test for fields ([4022b8b](4022b8b))
* add or extension for AccessFlags ([aec5eeb](aec5eeb))
* Add patch metadata ([8544fc4](8544fc4)), closes [ReVancedTeam/revanced-patches#1](https://github.com/ReVancedTeam/revanced-patches/issues/1)
* add SafeClassWriter ([ca6b94d](ca6b94d))
* Add warnings for Fuzzy resolver ([643a14e](643a14e))
* allow classes to be overwritten in addFiles and resolve signatures when applyPatches is called ([5f71a34](5f71a34))
* Allow unknown opcodes using `null` ([f4a47d4](f4a47d4))
* Finish first patcher test ([a9e4e8a](a9e4e8a))
* Improve `SignatureResolver` ([88a6a27](88a6a27))
* migrate to `DexPatchBundle` and `JarPatchBundle` ([7573db2](7573db2))
* migrate to dexlib ([be51f42](be51f42))
* Minor refactor and return proxy, if class has been proxied already ([2d3c611](2d3c611))
* patch dependencies annotation and `PatcherOptions` ([8442991](8442991))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([2319787](2319787))
* remaining mutable `EncodedValue` classes ([7d38bb0](7d38bb0))
* string signature ([ReVanced#22](https://github.com/gitcetra/revanced-patcher/issues/22)) ([c245edb](c245edb))
* use annotations instead of metadata objects ([6726884](6726884))
* utility functions to get metadata of patch & sigs ([72f16b7](72f16b7))

### Performance Improvements

* check type instead of class ([47eb493](47eb493))
* decode manifest only when not using resource patcher ([40b1fa4](40b1fa4))
* depend on `androlib` instead of `ApkDecoder` ([e5c054a](e5c054a))
* do not resolve empty signatures list ([1f7bf3a](1f7bf3a))
* lazy-ify all mutable clones ([05e4400](05e4400))
* optimize indexOf call away ([f8e978a](f8e978a))
* use Set instead of List since there are no dupes ([6221387](6221387))
* use String List and compare instead of any lambda ([aed4fd9](aed4fd9))

### Reverts

* AccessFlag extensions not working with IDE ([e161f7f](e161f7f))
* previous commits check for dupes in dexFile, not cache ([433914f](433914f))

### BREAKING CHANGES

* 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.
oSumAtrIX added a commit that referenced this pull request Jun 5, 2022
* refactor: Complete rewrite of `Io`

* style: format code

* style: rewrite todos

* fix: use lateinit instead of nonnull assert for zipEntry

* fix: use lateinit instead of nonnull assert for jarEntry & reuse zipEntry

* docs: add docs to `Patcher`

* test: match output of patcher

* chore: add todo to `Io` for removing non-class files

Co-authored-by: Sculas <contact@sculas.xyz>
oSumAtrIX pushed a commit that referenced this pull request Jun 5, 2022
# 1.0.0-dev.1 (2022-03-23)

### Bug Fixes

* avoid ignoring test resources (fixes [#1](#1)) ([d5a3c76](d5a3c76))
* current must be calculated after increment ([5f12bab](5f12bab))
* **gradle:** publish source and javadocs ([87bbde5](87bbde5))
* **Io:** fix finding classes by name ([460d62a](460d62a))
* **Io:** JAR loading and saving ([#8](#8)) ([4d98cbc](4d98cbc))
* nullable signature members ([#10](#10)) ([8db8893](8db8893))
* Patch should have access to the Cache ([6c0f082](6c0f082))
* remove broken code ([0e72a6e](0e72a6e))
* set index for insertAt to 0 by default ([1769132](1769132))
* workflow on dev branch ([7e67daf](7e67daf))

### Code Refactoring

* convert Patch to abstract class ([23e897a](23e897a))
* Optimize Signature class ([#11](#11)) ([49beec9](49beec9))
* Rename `net.revanced` to `app.revanced` ([3ab42a9](3ab42a9))

### Features

* Add `findParentMethod` utility method ([#4](#4)) ([00c6ab7](00c6ab7))

### BREAKING CHANGES

* 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 that referenced this pull request Jun 5, 2022
# 1.0.0 (2022-06-05)

### Bug Fixes

* `compareSignatureToMethod` not matching correctly in case opcodes are null ([cca12aa](cca12aa))
* `ConcurrentModificationException` while iterating through `proxies` and modifying it ([6cb7cdb](6cb7cdb))
* `JarPatchBundle` loading non-class files to class loader ([849616d](849616d))
* `PackageMetadata` ([7399450](7399450))
* `replaceWith` not replacing classes with used class proxies ([4178a1e](4178a1e))
* 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 [#1](#1)) ([d5a3c76](d5a3c76))
* Classes not being written properly because of array shifting ([6e4db11](6e4db11))
* current must be calculated after increment ([5f12bab](5f12bab))
* 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))
* **gradle:** publish source and javadocs ([c236ebe](c236ebe))
* incorrect pattern offset ([f3b5f67](f3b5f67))
* **Io:** fix finding classes by name ([b957501](b957501))
* **Io:** JAR loading and saving ([#8](#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))
* Move proxy package out of cache package ([ce21bd6](ce21bd6))
* null check causing an exception ([338bd9f](338bd9f))
* nullable signature members ([#10](#10)) ([674461f](674461f))
* Patch should have access to the Cache ([4dd820f](4dd820f))
* Patcher not writing resolved methods ([fac44a5](fac44a5))
* 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 leftover debug code ([0f30eac](0f30eac))
* return mutable set of classes ([66a9b76](66a9b76))
* returning failure on success ([48c4ea2](48c4ea2))
* 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))
* string signature in `SignatureResolver` ([e5ae970](e5ae970))
* Suppress unused for addFiles ([3d6a1d3](3d6a1d3))
* throwing in case the opcode patterns do not match ([3144ec8](3144ec8))
* use Array instead of Iterable for methodParameters ([dfac8f0](dfac8f0))
* using old instance of `Androlib` when saving ([a4d8be2](a4d8be2))
* 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))
* Optimize Signature class ([#11](#11)) ([7faa001](7faa001))
* Rename `net.revanced` to `app.revanced` ([7087230](7087230))

### Features

* `Dependencies` annotation ([893d4c6](893d4c6))
* `PatchLoader` ([ec9fd15](ec9fd15))
* Add `findParentMethod` utility method ([#4](#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 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 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 unknown opcodes using `null` ([0e5f4ba](0e5f4ba))
* Finish first patcher test ([0d8d19e](0d8d19e))
* Improve `SignatureResolver` ([139a23b](139a23b))
* 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))
* optional `forStaticMethod` parameter for `InlineSmaliCompiler.compileMethodInstructions` ([41e8860](41e8860))
* patch dependencies annotation and `PatcherOptions` ([6c65952](6c65952))
* properly manage `ClassProxy` & add `ProxyBackedClassList` ([6cb1fdf](6cb1fdf))
* remaining mutable `EncodedValue` classes ([3f97cc8](3f97cc8))
* string signature ([#22](#22)) ([612515a](612515a))
* use annotations instead of metadata objects ([d20f7fd](d20f7fd))
* utility functions to get metadata of patch & sigs ([54511a4](54511a4))

### 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

* AccessFlag extensions not working with IDE ([0bfb92a](0bfb92a))
* previous commits check for dupes in dexFile, not cache ([e810197](e810197))

### BREAKING CHANGES

* 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 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 apicalshark/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 chiraitori/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
# 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.

Saving jar does not work
2 participants