-
-
Notifications
You must be signed in to change notification settings - Fork 209
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: remove useless dummy nops #111
Conversation
The method creates multiple dummy nops, this PR would only consider one, is this considered? |
Yeah you're right, I updated it so that it takes care of multiple nops if necessary. |
I am not quite happy with the current implementation, isn't it possible to get rid of the nops with the current information without having to keep track of the indices? |
I'll look into it |
7a4f477
to
3ce8e76
Compare
Something like this would work. |
## [6.0.1](v6.0.0...v6.0.1) (2022-11-14) ### Bug Fixes * remove unnecessary dummy nop instructions ([#111](#111)) ([f9bc95f](f9bc95f))
🎉 This PR is included in version 6.0.1 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
# 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.
# [2.0.0](v1.10.2...v2.0.0) (2022-12-16) ### Bug Fixes * `MethodWalker` not accounting for all reference instructions ([48068cb](48068cb)) * add tests for PathOption ([d6308e1](d6308e1)) * broken deprecation message ([62aa295](62aa295)) * check dependencies for resource patches ([9c07ffc](9c07ffc)) * check if patch option requirement is met ([14a73bf](14a73bf)) * close open files ([ReVanced#75](https://github.com/bogadana/revanced-patcher/issues/75)) ([123ad54](123ad54)) * close stream when closing `DomFileEditor` ([77604d4](77604d4)) * compare any methods parameters ([ReVanced#101](https://github.com/bogadana/revanced-patcher/issues/101)) ([085a3a4](085a3a4)) * DomFileEditor opening in- and output streams on the same file ([83187c9](83187c9)) * fallback to patch class name instead of `java.lang.Class` class name ([4164cb0](4164cb0)) * **fingerprint:** do not throw on `MethodFingerprint.result` getter ([2f7e62e](2f7e62e)) * handle null properly ([ReVanced#64](https://github.com/bogadana/revanced-patcher/issues/64)) ([482af78](482af78)) * handle option types and nulls properly ([aff4968](aff4968)) * handle private companion objects ([ad3d332](ad3d332)) * invalid type propagation in options ([b873228](b873228)), closes [ReVanced#98](https://github.com/bogadana/revanced-patcher/issues/98) * invalid types for example options ([79f91e0](79f91e0)) * invert fingerprint resolution condition of `customFingerprint` ([e2faf4c](e2faf4c)) * make patcher version public ([76c45dd](76c45dd)) * missing additional items [skip ci] ([0ebab8b](0ebab8b)) * more useful error message ([4b2e323](4b2e323)) * only run list option check if not null ([4055939](4055939)) * PathOption should be open, not sealed ([a562e47](a562e47)) * publicize types when merging files if necessary ([ReVanced#137](https://github.com/bogadana/revanced-patcher/issues/137)) ([9ec720e](9ec720e)) * remove default param from Package.versions ([4b81318](4b81318)) * remove repeatable from PatchDeprecated ([6e73631](6e73631)) * remove requirement for solution [skip ci] ([ReVanced#80](https://github.com/bogadana/revanced-patcher/issues/80)) ([9a4d30e](9a4d30e)) * remove unnecessary dummy nop instructions ([ReVanced#111](https://github.com/bogadana/revanced-patcher/issues/111)) ([f9bc95f](f9bc95f)) * revert soft dependencies ([7b2d058](7b2d058)) * show error message if cause is null ([f9da2ad](f9da2ad)) * show error message instead of `null` ([8d95b14](8d95b14)) * **tests:** access `patternScanResult` through `scanResult` ([76676fb](76676fb)) * typo in ListOption ([3921648](3921648)) * use `Exception` instead of `MethodNotFoundException` ([2fc4ec4](2fc4ec4)) * use `MethodUtil.methodSignaturesMatch` instead of `Method.softCompareTo` ([bd053b7](bd053b7)) * use instruction index instead of strings list index for `StringMatch` ([843e62a](843e62a)) * wrong value for iterator in PatchOptions ([e31ac1f](e31ac1f)) ### Code Refactoring * Improve Patch Options ([6b909c1](6b909c1)) * improve structuring of classes and their implementations ([4aa14bb](4aa14bb)) * migrate from `Signature` to `Fingerprint` ([efa8ea1](efa8ea1)) * refactor!: move utility methods from `MethodFingerprintUtils` `MethodFingerprint` ([d802ef8](d802ef8)) * feat(fingerprint)!: `StringsScanResult` for `MethodFingerprint` ([3813e28](3813e28)) ### Features * `Closeable` patches ([bbd40bf](bbd40bf)) * add getValue & setValue for PatchOption ([2572cd0](2572cd0)) * add Patch#dependsOn extension ([523f67b](523f67b)) * add PathOption back ([172655b](172655b)) * add replace and remove extensions ([ReVanced#50](https://github.com/bogadana/revanced-patcher/issues/50)) ([92ac5e4](92ac5e4)) * apply changes from ReVanced Patcher ([ba9d998](ba9d998)) * default value for `Package.versions` annotation parameter ([131dedd](131dedd)) * deprecation for patches ([80c2e80](80c2e80)) * exclusive mutable access to files ([814ce0b](814ce0b)) * feature request issue template ([1b39278](1b39278)) * Improve Smali Compiler ([6bfe571](6bfe571)) * improved Patch Options ([e722e3f](e722e3f)) * issue templates [skip ci] ([112bc99](112bc99)) * log failed patches due to failed dependencies ([a467fbb](a467fbb)) * merge classes on addition ([ReVanced#127](https://github.com/bogadana/revanced-patcher/issues/127)) ([a925650](a925650)) * nullability for `BytecodePatch` constructor ([ReVanced#59](https://github.com/bogadana/revanced-patcher/issues/59)) ([4ea030d](4ea030d)) * nullable parameters ([7882a8d](7882a8d)) * patch options ([ReVanced#81](https://github.com/bogadana/revanced-patcher/issues/81)) ([fbb09f3](fbb09f3)) * PatchOptions#nullify to nullify an option ([371f0c4](371f0c4)) * registry for patch options ([2431785](2431785)) * remove deprecated functions ([ada5a03](ada5a03)) * remove unused annotation `DirectPatternScanMethod` ([538b2a8](538b2a8)) * remove unused annotation `SincePatcher` ([4ae9ad0](4ae9ad0)) * remove unused extension `dependsOn` ([797286b](797286b)) * remove unused patch extensions ([5583904](5583904)) * RwLock for opening files in `DomFileEditor` ([db4348c](db4348c)) * section `acknowledgements` for issue templates ([a0cb449](a0cb449)) * SincePatcher annotation ([25f74dc](25f74dc)) * Soft Dependencies for Patches ([8c12f8d](8c12f8d)) * sort patches in lexicographical order ([a306561](a306561)), closes [ReVanced#125](https://github.com/bogadana/revanced-patcher/issues/125) * streams overload for `XmlFileHolder` ([6f72c4c](6f72c4c)) * validator for patch options ([4e2e772](4e2e772)) ### Performance Improvements * decode resources only when necessary ([3ba4be2](3ba4be2)) * **fingerprint:** do not resolve already resolved fingerprints ([4bfd7eb](4bfd7eb)) * make exception an object ([75d2be8](75d2be8)) ### Reverts * revert breaking changes ([ReVanced#106](https://github.com/bogadana/revanced-patcher/issues/106)) ([124332f](124332f)) ### BREAKING CHANGES * various changes in which packages classes previously where and their implementation * These extensions do not exist anymore and any use should be removed * The extension does not exist anymore and any use should be removed * The annotation does not exist anymore and any use should be removed * Imports will have to be updated from `MethodFingerprintUtils` to `MethodFingerprint.Companion`. Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de> * `MethodFingerprint` now has a field for `MethodFingerprintScanResult`. `MethodFingerprintScanResult` now holds the previous field `MethodFingerprint.patternScanResult`. Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de> * Options has been moved from Patch to a new interface called OptionsContainer and are now handled entirely different. Make sure to check the examples to understand how it works. * Patch options now use the PatchOptions registry class instead of an Iterable. This change requires modifications to existing patches using this API. * Not backwards compatible, since a lot of classes where renamed.
# 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.
# 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.
# 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.
# 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.
Closes #91