From 636bded69cfd27266ef8247c277e7aa448dbf156 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 30 Sep 2025 22:17:10 +0400 Subject: [PATCH] refactor: Add main activity onCreate extension hook function --- patches/api/patches.api | 1 + .../patches/cricbuzz/misc/extension/Hooks.kt | 8 ++---- .../extension/hooks/ApplicationInitHook.kt | 10 +++----- .../patches/messenger/misc/extension/Hooks.kt | 10 +++----- .../extension/hooks/ApplicationInitHook.kt | 13 ++++------ .../app/revanced/patches/nunl/ads/Hooks.kt | 10 +++----- .../primevideo/misc/extension/Hooks.kt | 10 +++----- .../misc/extension/hooks/InitHook.kt | 10 +++----- .../misc/extension/hooks/InitHook.kt | 12 +++------ .../syncforreddit/extension/hooks/InitHook.kt | 12 +++------ .../misc/extension/SharedExtensionPatch.kt | 25 +++++++++++++++++++ .../patches/tiktok/misc/extension/Hooks.kt | 11 +++----- .../patches/twitch/misc/extension/Hooks.kt | 8 ++---- .../extension/hooks/ApplicationInitHook.kt | 12 +++------ 14 files changed, 71 insertions(+), 81 deletions(-) diff --git a/patches/api/patches.api b/patches/api/patches.api index 7b806b872..d364a0e78 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -705,6 +705,7 @@ public final class app/revanced/patches/shared/misc/extension/ExtensionHook { } public final class app/revanced/patches/shared/misc/extension/SharedExtensionPatchKt { + public static final fun activityOnCreateExtensionHook (Ljava/lang/String;)Lkotlin/jvm/functions/Function0; public static final fun extensionHook (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lapp/revanced/patcher/Fingerprint;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook; public static final fun extensionHook (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0; public static synthetic fun extensionHook$default (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lapp/revanced/patcher/Fingerprint;ILjava/lang/Object;)Lapp/revanced/patches/shared/misc/extension/ExtensionHook; diff --git a/patches/src/main/kotlin/app/revanced/patches/cricbuzz/misc/extension/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/cricbuzz/misc/extension/Hooks.kt index c6520086d..3b4e0da2c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/cricbuzz/misc/extension/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/cricbuzz/misc/extension/Hooks.kt @@ -1,9 +1,5 @@ package app.revanced.patches.cricbuzz.misc.extension -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val applicationInitHook = extensionHook { - custom { method, classDef -> - method.name == "onCreate" && classDef.endsWith("/NyitoActivity;") - } -} +internal val applicationInitHook = activityOnCreateExtensionHook("/NyitoActivity;") diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt index eca0a885f..05591136b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt @@ -1,9 +1,7 @@ package app.revanced.patches.instagram.misc.extension.hooks -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val applicationInitHook = extensionHook { - custom { method, classDef -> - method.name == "onCreate" && classDef.endsWith("/InstagramAppShell;") - } -} +internal val applicationInitHook = activityOnCreateExtensionHook( + "/InstagramAppShell;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/Hooks.kt index 55bd9aaa0..9c2160d04 100644 --- a/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/messenger/misc/extension/Hooks.kt @@ -1,9 +1,7 @@ package app.revanced.patches.messenger.misc.extension -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val messengerApplicationOnCreateHook = extensionHook { - custom { method, classDef -> - method.name == "onCreate" && classDef.endsWith("/MessengerApplication;") - } -} +internal val messengerApplicationOnCreateHook = activityOnCreateExtensionHook( + "/MessengerApplication;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/extension/hooks/ApplicationInitHook.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/extension/hooks/ApplicationInitHook.kt index 032e10697..2f429b757 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/misc/extension/hooks/ApplicationInitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/extension/hooks/ApplicationInitHook.kt @@ -1,7 +1,8 @@ package app.revanced.patches.music.misc.extension.hooks -import app.revanced.patches.music.shared.YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE import app.revanced.patcher.string +import app.revanced.patches.music.shared.YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook import app.revanced.patches.shared.misc.extension.extensionHook internal val applicationInitHook = extensionHook { @@ -13,10 +14,6 @@ internal val applicationInitHook = extensionHook { custom { method, _ -> method.name == "onCreate" } } -internal val applicationInitOnCreateHook = extensionHook { - returns("V") - parameters("Landroid/os/Bundle;") - custom { method, classDef -> - method.name == "onCreate" && classDef.type == YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE - } -} +internal val applicationInitOnCreateHook = activityOnCreateExtensionHook( + YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE +) diff --git a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt index e83d37322..626b25109 100644 --- a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt @@ -1,9 +1,7 @@ package app.revanced.patches.nunl.ads -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val mainActivityOnCreateHook = extensionHook { - custom { method, classDef -> - classDef.endsWith("/NUApplication;") && method.name == "onCreate" - } -} +internal val mainActivityOnCreateHook = activityOnCreateExtensionHook( + "/NUApplication;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/primevideo/misc/extension/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/primevideo/misc/extension/Hooks.kt index 763c2bfd5..ef22c6412 100644 --- a/patches/src/main/kotlin/app/revanced/patches/primevideo/misc/extension/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/primevideo/misc/extension/Hooks.kt @@ -1,9 +1,7 @@ package app.revanced.patches.primevideo.misc.extension -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val applicationInitHook = extensionHook { - custom { method, classDef -> - method.name == "onCreate" && classDef.endsWith("/SplashScreenActivity;") - } -} +internal val applicationInitHook = activityOnCreateExtensionHook( + "/SplashScreenActivity;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt index fe644145b..d3d4523cb 100644 --- a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/misc/extension/hooks/InitHook.kt @@ -1,9 +1,7 @@ package app.revanced.patches.reddit.customclients.baconreader.misc.extension.hooks -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val initHook = extensionHook { - custom { method, _ -> - method.definingClass == "Lcom/onelouder/baconreader/BaconReader;" && method.name == "onCreate" - } -} +internal val initHook = activityOnCreateExtensionHook( + "Lcom/onelouder/baconreader/BaconReader;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/misc/extension/hooks/InitHook.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/misc/extension/hooks/InitHook.kt index 1e7e4e2e8..303a4ecb8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/misc/extension/hooks/InitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/boostforreddit/misc/extension/hooks/InitHook.kt @@ -1,11 +1,7 @@ package app.revanced.patches.reddit.customclients.boostforreddit.misc.extension.hooks -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val initHook = extensionHook( - insertIndexResolver = { 1 }, -) { - custom { method, _ -> - method.definingClass == "Lcom/rubenmayayo/reddit/MyApplication;" && method.name == "onCreate" - } -} +internal val initHook = activityOnCreateExtensionHook( + "Lcom/rubenmayayo/reddit/MyApplication;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/extension/hooks/InitHook.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/extension/hooks/InitHook.kt index 00244b4df..c70b90b8f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/extension/hooks/InitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/customclients/sync/syncforreddit/extension/hooks/InitHook.kt @@ -1,11 +1,7 @@ package app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.hooks -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val initHook = extensionHook( - insertIndexResolver = { 1 }, // Insert after call to super class. -) { - custom { method, classDef -> - method.name == "onCreate" && classDef.type == "Lcom/laurencedawson/reddit_sync/RedditApplication;" - } -} +internal val initHook = activityOnCreateExtensionHook( + "Lcom/laurencedawson/reddit_sync/RedditApplication;" +) diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/extension/SharedExtensionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/extension/SharedExtensionPatch.kt index f0be1f43b..907c612c3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/extension/SharedExtensionPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/extension/SharedExtensionPatch.kt @@ -115,3 +115,28 @@ fun extensionHook( val fingerprint by FingerprintDelegate(block = fingerprintBuilderBlock) ExtensionHook(fingerprint, insertIndexResolver, contextRegisterResolver) } + +/** + * Creates an extension hook from a non-obfuscated activity, which typically is the main activity + * defined in the app manifest.xml file. + * + * @param activityClassType Either the full activity class type such as `Lcom/company/MainActivity;` + * or the 'ends with' string for the activity such as `/MainActivity;` + */ +fun activityOnCreateExtensionHook(activityClassType: String): () -> ExtensionHook { + if (!activityClassType.endsWith(';')) { + throw IllegalArgumentException("Activity class type does not end with semicolon: $activityClassType") + } + + val fullClassType = activityClassType.startsWith('L') + + return extensionHook { + returns("V") + parameters("Landroid/os/Bundle;") + custom { method, classDef -> + method.name == "onCreate" && + if (fullClassType) classDef.type == activityClassType + else classDef.type.endsWith(activityClassType) + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/extension/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/extension/Hooks.kt index db1912677..9b8a213b0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/extension/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/misc/extension/Hooks.kt @@ -1,14 +1,11 @@ package app.revanced.patches.tiktok.misc.extension +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook import app.revanced.patches.shared.misc.extension.extensionHook -import com.android.tools.smali.dexlib2.AccessFlags -internal val initHook = extensionHook { - custom { method, classDef -> - classDef.type == "Lcom/ss/android/ugc/aweme/main/MainActivity;" && - method.name == "onCreate" - } -} +internal val initHook = activityOnCreateExtensionHook( + "Lcom/ss/android/ugc/aweme/main/MainActivity;" +) /** * In some cases the extension code can be called before diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/misc/extension/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/misc/extension/Hooks.kt index 9a46867ab..1a345d75c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/misc/extension/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/misc/extension/Hooks.kt @@ -1,9 +1,5 @@ package app.revanced.patches.twitch.misc.extension -import app.revanced.patches.shared.misc.extension.extensionHook +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook -internal val initHook = extensionHook { - custom { method, classDef -> - method.name == "onCreate" && classDef.endsWith("/TwitchApplication;") - } -} +internal val initHook = activityOnCreateExtensionHook("/TwitchApplication;") diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/extension/hooks/ApplicationInitHook.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/extension/hooks/ApplicationInitHook.kt index eab3f1a77..82c80931a 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/extension/hooks/ApplicationInitHook.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/extension/hooks/ApplicationInitHook.kt @@ -1,6 +1,7 @@ package app.revanced.patches.youtube.misc.extension.hooks import app.revanced.patcher.string +import app.revanced.patches.shared.misc.extension.activityOnCreateExtensionHook import app.revanced.patches.shared.misc.extension.extensionHook import app.revanced.patches.youtube.shared.YOUTUBE_MAIN_ACTIVITY_CLASS_TYPE @@ -17,11 +18,6 @@ internal val applicationInitHook = extensionHook { ) } -internal val applicationInitOnCrateHook = extensionHook { - returns("V") - parameters("Landroid/os/Bundle;") - custom { method, classDef -> - method.name == "onCreate" && classDef.type == YOUTUBE_MAIN_ACTIVITY_CLASS_TYPE - } -} - +internal val applicationInitOnCrateHook = activityOnCreateExtensionHook( + YOUTUBE_MAIN_ACTIVITY_CLASS_TYPE +)