Skip to content

Commit 0abf1c6

Browse files
authored
feat: Improve Fingerprint API (#316)
Fingerprints can now be matched easily without adding them to a patch first. BREAKING CHANGE: Many APIs have been changed.
1 parent aa472eb commit 0abf1c6

File tree

14 files changed

+357
-362
lines changed

14 files changed

+357
-362
lines changed

api/revanced-patcher.api

+20-29
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
public final class app/revanced/patcher/Fingerprint {
2-
public final fun getMatch ()Lapp/revanced/patcher/Match;
3-
public final fun match (Lapp/revanced/patcher/patch/BytecodePatchContext;Lcom/android/tools/smali/dexlib2/iface/ClassDef;)Z
4-
public final fun match (Lapp/revanced/patcher/patch/BytecodePatchContext;Lcom/android/tools/smali/dexlib2/iface/Method;)Z
52
}
63

74
public final class app/revanced/patcher/FingerprintBuilder {
@@ -18,20 +15,17 @@ public final class app/revanced/patcher/FingerprintBuilder {
1815

1916
public final class app/revanced/patcher/FingerprintKt {
2017
public static final fun fingerprint (ILkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/Fingerprint;
21-
public static final fun fingerprint (Lapp/revanced/patcher/patch/BytecodePatchBuilder;ILkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/BytecodePatchBuilder$InvokedFingerprint;
2218
public static synthetic fun fingerprint$default (ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/Fingerprint;
23-
public static synthetic fun fingerprint$default (Lapp/revanced/patcher/patch/BytecodePatchBuilder;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/BytecodePatchBuilder$InvokedFingerprint;
2419
}
2520

2621
public abstract interface annotation class app/revanced/patcher/InternalApi : java/lang/annotation/Annotation {
2722
}
2823

2924
public final class app/revanced/patcher/Match {
30-
public fun <init> (Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/iface/ClassDef;Lapp/revanced/patcher/Match$PatternMatch;Ljava/util/List;Lapp/revanced/patcher/patch/BytecodePatchContext;)V
31-
public final fun getClassDef ()Lcom/android/tools/smali/dexlib2/iface/ClassDef;
32-
public final fun getMethod ()Lcom/android/tools/smali/dexlib2/iface/Method;
33-
public final fun getMutableClass ()Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;
34-
public final fun getMutableMethod ()Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;
25+
public final fun getClassDef ()Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;
26+
public final fun getMethod ()Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;
27+
public final fun getOriginalClassDef ()Lcom/android/tools/smali/dexlib2/iface/ClassDef;
28+
public final fun getOriginalMethod ()Lcom/android/tools/smali/dexlib2/iface/Method;
3529
public final fun getPatternMatch ()Lapp/revanced/patcher/Match$PatternMatch;
3630
public final fun getStringMatches ()Ljava/util/List;
3731
}
@@ -63,8 +57,8 @@ public final class app/revanced/patcher/Patcher : java/io/Closeable {
6357
}
6458

6559
public final class app/revanced/patcher/PatcherConfig {
66-
public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
67-
public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
60+
public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V
61+
public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6862
}
6963

7064
public final class app/revanced/patcher/PatcherContext : java/io/Closeable {
@@ -135,30 +129,27 @@ public final class app/revanced/patcher/extensions/InstructionExtensions {
135129
}
136130

137131
public final class app/revanced/patcher/patch/BytecodePatch : app/revanced/patcher/patch/Patch {
138-
public final fun getExtension ()Ljava/io/InputStream;
139-
public final fun getFingerprints ()Ljava/util/Set;
132+
public final fun getExtensionInputStream ()Ljava/util/function/Supplier;
140133
public fun toString ()Ljava/lang/String;
141134
}
142135

143136
public final class app/revanced/patcher/patch/BytecodePatchBuilder : app/revanced/patcher/patch/PatchBuilder {
144137
public synthetic fun build$revanced_patcher ()Lapp/revanced/patcher/patch/Patch;
145138
public final fun extendWith (Ljava/lang/String;)Lapp/revanced/patcher/patch/BytecodePatchBuilder;
146-
public final fun getExtension ()Ljava/io/InputStream;
147-
public final fun invoke (Lapp/revanced/patcher/Fingerprint;)Lapp/revanced/patcher/patch/BytecodePatchBuilder$InvokedFingerprint;
148-
public final fun setExtension (Ljava/io/InputStream;)V
149-
}
150-
151-
public final class app/revanced/patcher/patch/BytecodePatchBuilder$InvokedFingerprint {
152-
public final fun getValue (Ljava/lang/Void;Lkotlin/reflect/KProperty;)Lapp/revanced/patcher/Match;
139+
public final fun getExtensionInputStream ()Ljava/util/function/Supplier;
140+
public final fun setExtensionInputStream (Ljava/util/function/Supplier;)V
153141
}
154142

155143
public final class app/revanced/patcher/patch/BytecodePatchContext : app/revanced/patcher/patch/PatchContext, java/io/Closeable {
156144
public final fun classBy (Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/util/proxy/ClassProxy;
157-
public final fun classByType (Ljava/lang/String;)Lapp/revanced/patcher/util/proxy/ClassProxy;
158145
public fun close ()V
159146
public synthetic fun get ()Ljava/lang/Object;
160147
public fun get ()Ljava/util/Set;
161148
public final fun getClasses ()Lapp/revanced/patcher/util/ProxyClassList;
149+
public final fun getMatch (Lapp/revanced/patcher/Fingerprint;)Lapp/revanced/patcher/Match;
150+
public final fun getValue (Lapp/revanced/patcher/Fingerprint;Ljava/lang/Void;Lkotlin/reflect/KProperty;)Lapp/revanced/patcher/Match;
151+
public final fun match (Lapp/revanced/patcher/Fingerprint;Lcom/android/tools/smali/dexlib2/iface/ClassDef;)Lapp/revanced/patcher/Match;
152+
public final fun match (Lapp/revanced/patcher/Fingerprint;Lcom/android/tools/smali/dexlib2/iface/Method;)Lapp/revanced/patcher/Match;
162153
public final fun navigate (Lcom/android/tools/smali/dexlib2/iface/Method;)Lapp/revanced/patcher/util/MethodNavigator;
163154
public final fun proxy (Lcom/android/tools/smali/dexlib2/iface/ClassDef;)Lapp/revanced/patcher/util/proxy/ClassProxy;
164155
}
@@ -286,7 +277,7 @@ public final class app/revanced/patcher/patch/Options : java/util/Map, kotlin/jv
286277
}
287278

288279
public abstract class app/revanced/patcher/patch/Patch {
289-
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
280+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
290281
public final fun execute (Lapp/revanced/patcher/patch/PatchContext;)V
291282
public final fun finalize (Lapp/revanced/patcher/patch/PatchContext;)V
292283
public final fun getCompatiblePackages ()Ljava/util/Set;
@@ -303,22 +294,22 @@ public abstract class app/revanced/patcher/patch/PatchBuilder {
303294
public final fun compatibleWith ([Ljava/lang/String;)V
304295
public final fun compatibleWith ([Lkotlin/Pair;)V
305296
public final fun dependsOn ([Lapp/revanced/patcher/patch/Patch;)V
306-
public final fun execute (Lkotlin/jvm/functions/Function2;)V
307-
public final fun finalize (Lkotlin/jvm/functions/Function2;)V
297+
public final fun execute (Lkotlin/jvm/functions/Function1;)V
298+
public final fun finalize (Lkotlin/jvm/functions/Function1;)V
308299
protected final fun getCompatiblePackages ()Ljava/util/Set;
309300
protected final fun getDependencies ()Ljava/util/Set;
310301
protected final fun getDescription ()Ljava/lang/String;
311-
protected final fun getExecutionBlock ()Lkotlin/jvm/functions/Function2;
312-
protected final fun getFinalizeBlock ()Lkotlin/jvm/functions/Function2;
302+
protected final fun getExecutionBlock ()Lkotlin/jvm/functions/Function1;
303+
protected final fun getFinalizeBlock ()Lkotlin/jvm/functions/Function1;
313304
protected final fun getName ()Ljava/lang/String;
314305
protected final fun getOptions ()Ljava/util/Set;
315306
protected final fun getUse ()Z
316307
public final fun invoke (Lapp/revanced/patcher/patch/Option;)Lapp/revanced/patcher/patch/Option;
317308
public final fun invoke (Ljava/lang/String;[Ljava/lang/String;)Lkotlin/Pair;
318309
protected final fun setCompatiblePackages (Ljava/util/Set;)V
319310
protected final fun setDependencies (Ljava/util/Set;)V
320-
protected final fun setExecutionBlock (Lkotlin/jvm/functions/Function2;)V
321-
protected final fun setFinalizeBlock (Lkotlin/jvm/functions/Function2;)V
311+
protected final fun setExecutionBlock (Lkotlin/jvm/functions/Function1;)V
312+
protected final fun setFinalizeBlock (Lkotlin/jvm/functions/Function1;)V
322313
}
323314

324315
public abstract interface class app/revanced/patcher/patch/PatchContext : java/util/function/Supplier {

docs/1_patcher_intro.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ val patcherResult = Patcher(PatcherConfig(apkFile = File("some.apk"))).use { pat
8989
runBlocking {
9090
patcher().collect { patchResult ->
9191
if (patchResult.exception != null)
92-
logger.info("\"${patchResult.patch}\" failed:\n${patchResult.exception}")
92+
logger.info { "\"${patchResult.patch}\" failed:\n${patchResult.exception}" }
9393
else
94-
logger.info("\"${patchResult.patch}\" succeeded")
94+
logger.info { "\"${patchResult.patch}\" succeeded" }
9595
}
9696
}
9797

docs/2_1_setup.md

+4
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ To start developing patches with ReVanced Patcher, you must prepare a developmen
7272

7373
Throughout the documentation, [ReVanced Patches](https://github.com/revanced/revanced-patches) will be used as an example project.
7474

75+
> [!NOTE]
76+
> To start a fresh project,
77+
> you can use the [ReVanced Patches template](https://github.com/revanced/revanced-patches-template).
78+
7579
1. Clone the repository
7680

7781
```bash

0 commit comments

Comments
 (0)