mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-28 13:11:03 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70e21500cc | ||
|
|
784e97591a | ||
|
|
26ff3b338e | ||
|
|
28c864ae95 | ||
|
|
deb829c791 | ||
|
|
3c0f3ac968 | ||
|
|
2f6da4ed27 |
26
CHANGELOG.md
26
CHANGELOG.md
@@ -1,3 +1,29 @@
|
|||||||
|
## [2.68.2](https://github.com/revanced/revanced-patches/compare/v2.68.1...v2.68.2) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **hide-time-and-seekbar:** don't draw the seekbar ([#594](https://github.com/revanced/revanced-patches/issues/594)) ([46e0195](https://github.com/revanced/revanced-patches/commit/46e0195f760dc11ec8d2068ffb57997eccab1aff))
|
||||||
|
|
||||||
|
## [2.68.1](https://github.com/revanced/revanced-patches/compare/v2.68.0...v2.68.1) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **sponsorblock:** resolve unresolved fingerprint ([e7296f3](https://github.com/revanced/revanced-patches/commit/e7296f3424bed78a0149cca9bf6e29243e962150))
|
||||||
|
|
||||||
|
# [2.68.0](https://github.com/revanced/revanced-patches/compare/v2.67.1...v2.68.0) (2022-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **hide-premium-navbar:** remove the correct instructions ([#591](https://github.com/revanced/revanced-patches/issues/591)) ([b4b0c97](https://github.com/revanced/revanced-patches/commit/b4b0c972d28cf7591ece04d154d1183c8431cb77))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **tiktok:** adapt `tiktok-download` with `tiktok-settings`. ([#586](https://github.com/revanced/revanced-patches/issues/586)) ([876b726](https://github.com/revanced/revanced-patches/commit/876b7266109b099597dd19d6ed3fa3dac098b73b))
|
||||||
|
|
||||||
## [2.67.1](https://github.com/revanced/revanced-patches/compare/v2.67.0...v2.67.1) (2022-09-23)
|
## [2.67.1](https://github.com/revanced/revanced-patches/compare/v2.67.0...v2.67.1) (2022-09-23)
|
||||||
|
|
||||||
# [2.67.0](https://github.com/revanced/revanced-patches/compare/v2.66.2...v2.67.0) (2022-09-23)
|
# [2.67.0](https://github.com/revanced/revanced-patches/compare/v2.66.2...v2.67.0) (2022-09-23)
|
||||||
|
|||||||
146
README.md
146
README.md
@@ -4,20 +4,60 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
|
|
||||||
> Looking for the JSON variant of this? [Click here](patches.json).
|
> Looking for the JSON variant of this? [Click here](patches.json).
|
||||||
|
|
||||||
### 📦 `com.spotify.music`
|
### 📦 `com.google.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `hide-premium-nav-bar` | Removes the premium tab from the navbar. | all |
|
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
|
||||||
|
| `premium-heading` | Shows premium branding on the home screen. | all |
|
||||||
|
| `theme` | Applies a custom theme. | all |
|
||||||
|
| `old-quality-layout` | Enables the original quality flyout menu. | 17.36.37 |
|
||||||
|
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.36.37 |
|
||||||
|
| `sponsorblock` | Integrate SponsorBlock. | 17.36.37 |
|
||||||
|
| `hide-watermark` | Hides creator's watermarks on videos. | 17.36.37 |
|
||||||
|
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.36.37 |
|
||||||
|
| `hide-create-button` | Hides the create button in the navigation bar. | 17.36.37 |
|
||||||
|
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.36.37 |
|
||||||
|
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.36.37 |
|
||||||
|
| `hide-time-and-seekbar` | Hides progress bar and time counter on videos. | 17.36.37 |
|
||||||
|
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.36.37 |
|
||||||
|
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.36.37 |
|
||||||
|
| `disable-auto-player-popup-panels` | Disable automatic popup panels (playlist or live chat) on video player. | 17.36.37 |
|
||||||
|
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.36.37 |
|
||||||
|
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
||||||
|
| `video-ads` | Removes ads in the video player. | 17.36.37 |
|
||||||
|
| `general-ads` | Removes general ads. | 17.36.37 |
|
||||||
|
| `hide-infocard-suggestions` | Hides infocards in videos. | 17.36.37 |
|
||||||
|
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.36.37 |
|
||||||
|
| `downloads` | Enables downloading music and videos from YouTube. | 17.36.37 |
|
||||||
|
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.36.37 |
|
||||||
|
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 17.36.37 |
|
||||||
|
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
||||||
|
| `minimized-playback` | Enables minimized and background playback. | 17.36.37 |
|
||||||
|
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.36.37 |
|
||||||
|
| `custom-playback-speed` | Adds more video playback speed options. | 17.36.37 |
|
||||||
|
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.36.37 |
|
||||||
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
|
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.36.37 |
|
||||||
|
| `enable-debugging` | Enables app debugging by patching the manifest file. | all |
|
||||||
|
| `always-autorepeat` | Always repeats the playing video again. | 17.36.37 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.twitter.android`
|
### 📦 `com.vanced.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `timeline-ads` | Removes ads from the Twitter timeline. | all |
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `de.dwd.warnapp`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.reddit.frontpage`
|
### 📦 `com.reddit.frontpage`
|
||||||
@@ -29,6 +69,23 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |
|
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.google.android.apps.youtube.music`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `background-play` | Enables playing music in the background. | 5.23.50 |
|
||||||
|
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.23.50 |
|
||||||
|
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.23.50 |
|
||||||
|
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.23.50 |
|
||||||
|
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.23.50 |
|
||||||
|
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.23.50 |
|
||||||
|
| `music-video-ads` | Removes ads in the music player. | 5.23.50 |
|
||||||
|
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.23.50 |
|
||||||
|
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.23.50 |
|
||||||
|
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.23.50 |
|
||||||
|
</details>
|
||||||
|
|
||||||
### 📦 `com.garzotto.pflotsh.ecmwf_a`
|
### 📦 `com.garzotto.pflotsh.ecmwf_a`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -37,42 +94,17 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |
|
| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.google.android.apps.youtube.music`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.23.50 |
|
|
||||||
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.23.50 |
|
|
||||||
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.23.50 |
|
|
||||||
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.23.50 |
|
|
||||||
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.23.50 |
|
|
||||||
| `background-play` | Enables playing music in the background. | 5.23.50 |
|
|
||||||
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.23.50 |
|
|
||||||
| `music-video-ads` | Removes ads in the music player. | 5.23.50 |
|
|
||||||
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.23.50 |
|
|
||||||
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.23.50 |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `de.dwd.warnapp`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.ss.android.ugc.trill`
|
### 📦 `com.ss.android.ugc.trill`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
|
||||||
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
|
||||||
| `tiktok-force-login` | Do not force login. | all |
|
|
||||||
| `tiktok-settings` | Add settings menu to TikTok. | all |
|
|
||||||
| `tiktok-ads` | Removes ads from TikTok. | all |
|
| `tiktok-ads` | Removes ads from TikTok. | all |
|
||||||
|
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
||||||
|
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
|
| `tiktok-settings` | Add settings menu to TikTok. | all |
|
||||||
|
| `tiktok-force-login` | Do not force login. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.zhiliaoapp.musically`
|
### 📦 `com.zhiliaoapp.musically`
|
||||||
@@ -81,59 +113,27 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
|
||||||
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
|
||||||
| `tiktok-force-login` | Do not force login. | all |
|
|
||||||
| `tiktok-settings` | Add settings menu to TikTok. | all |
|
|
||||||
| `tiktok-ads` | Removes ads from TikTok. | all |
|
| `tiktok-ads` | Removes ads from TikTok. | all |
|
||||||
|
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
||||||
|
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
|
| `tiktok-settings` | Add settings menu to TikTok. | all |
|
||||||
|
| `tiktok-force-login` | Do not force login. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.google.android.youtube`
|
### 📦 `com.twitter.android`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.36.37 |
|
| `timeline-ads` | Removes ads from the Twitter timeline. | all |
|
||||||
| `downloads` | Enables downloading music and videos from YouTube. | 17.36.37 |
|
|
||||||
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.36.37 |
|
|
||||||
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
|
||||||
| `hide-create-button` | Hides the create button in the navigation bar. | 17.36.37 |
|
|
||||||
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.36.37 |
|
|
||||||
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.36.37 |
|
|
||||||
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.36.37 |
|
|
||||||
| `premium-heading` | Shows premium branding on the home screen. | all |
|
|
||||||
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
|
|
||||||
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.36.37 |
|
|
||||||
| `old-quality-layout` | Enables the original quality flyout menu. | 17.36.37 |
|
|
||||||
| `theme` | Applies a custom theme. | all |
|
|
||||||
| `hide-watermark` | Hides creator's watermarks on videos. | 17.36.37 |
|
|
||||||
| `sponsorblock` | Integrate SponsorBlock. | 17.36.37 |
|
|
||||||
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.36.37 |
|
|
||||||
| `hide-time-and-seekbar` | Hides progress bar and time counter on videos. | 17.36.37 |
|
|
||||||
| `disable-auto-player-popup-panels` | Disable automatic popup panels (playlist or live chat) on video player. | 17.36.37 |
|
|
||||||
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.36.37 |
|
|
||||||
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.36.37 |
|
|
||||||
| `minimized-playback` | Enables minimized and background playback. | 17.36.37 |
|
|
||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
|
||||||
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.36.37 |
|
|
||||||
| `always-autorepeat` | Always repeats the playing video again. | 17.36.37 |
|
|
||||||
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 17.36.37 |
|
|
||||||
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
|
||||||
| `enable-debugging` | Enables app debugging by patching the manifest file. | all |
|
|
||||||
| `custom-playback-speed` | Adds more video playback speed options. | 17.36.37 |
|
|
||||||
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.36.37 |
|
|
||||||
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.36.37 |
|
|
||||||
| `video-ads` | Removes ads in the video player. | 17.36.37 |
|
|
||||||
| `general-ads` | Removes general ads. | 17.36.37 |
|
|
||||||
| `hide-infocard-suggestions` | Hides infocards in videos. | 17.36.37 |
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.vanced.android.youtube`
|
### 📦 `com.spotify.music`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.67.1
|
version = 2.68.2
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -5,10 +5,9 @@ import app.revanced.patcher.annotation.Version
|
|||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
import app.revanced.patches.spotify.premium_navbar_tab.annotations.PremiumNavbarTabCompatibility
|
import app.revanced.patches.spotify.premium_navbar_tab.annotations.PremiumNavbarTabCompatibility
|
||||||
|
|
||||||
@Name("debug-menu-activity-fingerprint")
|
@Name("add-premium-navbar-tab-parent-fingerprint")
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
@PremiumNavbarTabCompatibility
|
@PremiumNavbarTabCompatibility
|
||||||
object DebugMenuActivityFingerprint : MethodFingerprint(
|
object AddPremiumNavbarTabParentFingerprint : MethodFingerprint(
|
||||||
strings = listOf("com.spotify.app.music.debugtools.menu.DebugMenuActivity"),
|
strings = listOf("com.samsung.android.samsungaccount.action.REQUEST_AUTHCODE")
|
||||||
parameters = listOf("L", "L"),
|
|
||||||
)
|
)
|
||||||
@@ -13,40 +13,48 @@ import app.revanced.patcher.patch.annotations.Patch
|
|||||||
import app.revanced.patcher.patch.impl.BytecodePatch
|
import app.revanced.patcher.patch.impl.BytecodePatch
|
||||||
import app.revanced.patches.spotify.premium_navbar_tab.annotations.PremiumNavbarTabCompatibility
|
import app.revanced.patches.spotify.premium_navbar_tab.annotations.PremiumNavbarTabCompatibility
|
||||||
import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.AddPremiumNavbarTabFingerprint
|
import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.AddPremiumNavbarTabFingerprint
|
||||||
import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.DebugMenuActivityFingerprint
|
import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.AddPremiumNavbarTabParentFingerprint
|
||||||
import app.revanced.patches.youtube.misc.mapping.patch.ResourceIdMappingProviderResourcePatch
|
import app.revanced.patches.youtube.misc.mapping.patch.ResourceIdMappingProviderResourcePatch
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.WideLiteralInstruction
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("hide-premium-nav-bar")
|
@Name("hide-premium-navbar")
|
||||||
@Description("Removes the premium tab from the navbar.")
|
@Description("Removes the premium tab from the navbar.")
|
||||||
@PremiumNavbarTabCompatibility
|
@PremiumNavbarTabCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
@DependsOn([ResourceIdMappingProviderResourcePatch::class])
|
@DependsOn([ResourceIdMappingProviderResourcePatch::class])
|
||||||
class PremiumNavbarTabPatch : BytecodePatch(
|
class PremiumNavbarTabPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
DebugMenuActivityFingerprint
|
AddPremiumNavbarTabParentFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {
|
override fun execute(data: BytecodeData): PatchResult {
|
||||||
val parentResult = DebugMenuActivityFingerprint.result!!
|
val parentResult = AddPremiumNavbarTabParentFingerprint.result!!
|
||||||
AddPremiumNavbarTabFingerprint.resolve(data, parentResult.classDef)
|
AddPremiumNavbarTabFingerprint.resolve(data, parentResult.classDef)
|
||||||
|
|
||||||
val result = AddPremiumNavbarTabFingerprint.result!!
|
val result = AddPremiumNavbarTabFingerprint.result!!
|
||||||
|
|
||||||
val method = result.mutableMethod
|
val method = result.mutableMethod
|
||||||
|
|
||||||
val premiumTabId = ResourceIdMappingProviderResourcePatch.resourceMappings.single{it.type == "id" && it.name == "premium_tab"}.id.toInt()
|
|
||||||
|
|
||||||
val methodInstructions = method.implementation!!.instructions
|
val methodInstructions = method.implementation!!.instructions
|
||||||
|
val lastInstructionIdx = methodInstructions.size - 1
|
||||||
|
|
||||||
|
val premiumTabId = ResourceIdMappingProviderResourcePatch.resourceMappings.single{it.type == "id" && it.name == "premium_tab"}.id
|
||||||
|
|
||||||
|
var removeAmount = 2
|
||||||
|
// 2nd const remove method
|
||||||
for ((i, instruction) in methodInstructions.asReversed().withIndex()) {
|
for ((i, instruction) in methodInstructions.asReversed().withIndex()) {
|
||||||
if (instruction.opcode.ordinal != Opcode.CONST.ordinal) continue
|
if (instruction.opcode.ordinal != Opcode.CONST.ordinal) continue
|
||||||
if ((instruction as OneRegisterInstruction).registerA != premiumTabId) continue
|
if ((instruction as WideLiteralInstruction).wideLiteral != premiumTabId) continue
|
||||||
val constIdx = methodInstructions.size - i
|
|
||||||
val methodIdx = constIdx + 8
|
val findThreshold = 10
|
||||||
method.removeInstruction(methodIdx)
|
val constIndex = lastInstructionIdx - i
|
||||||
break
|
val invokeInstruction = methodInstructions.subList(constIndex, constIndex + findThreshold).first {
|
||||||
|
it.opcode.ordinal == Opcode.INVOKE_VIRTUAL_RANGE.ordinal
|
||||||
|
}
|
||||||
|
method.removeInstruction(methodInstructions.indexOf(invokeInstruction))
|
||||||
|
|
||||||
|
if (--removeAmount == 0) break
|
||||||
}
|
}
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
|
|||||||
@@ -5,9 +5,13 @@ import app.revanced.patcher.annotation.Name
|
|||||||
import app.revanced.patcher.annotation.Version
|
import app.revanced.patcher.annotation.Version
|
||||||
import app.revanced.patcher.data.impl.BytecodeData
|
import app.revanced.patcher.data.impl.BytecodeData
|
||||||
import app.revanced.patcher.data.impl.toMethodWalker
|
import app.revanced.patcher.data.impl.toMethodWalker
|
||||||
|
import app.revanced.patcher.extensions.addInstruction
|
||||||
|
import app.revanced.patcher.extensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.replaceInstruction
|
import app.revanced.patcher.extensions.replaceInstruction
|
||||||
import app.revanced.patcher.extensions.replaceInstructions
|
import app.revanced.patcher.extensions.replaceInstructions
|
||||||
import app.revanced.patcher.patch.*
|
import app.revanced.patcher.patch.PatchResult
|
||||||
|
import app.revanced.patcher.patch.PatchResultError
|
||||||
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.patch.impl.BytecodePatch
|
import app.revanced.patcher.patch.impl.BytecodePatch
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
@@ -16,6 +20,7 @@ import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonS
|
|||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint2
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint2
|
||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint3
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint3
|
||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPathParentFingerprint
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPathParentFingerprint
|
||||||
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||||
@@ -31,7 +36,8 @@ class DownloadsPatch : BytecodePatch(
|
|||||||
ACLCommonShareFingerprint,
|
ACLCommonShareFingerprint,
|
||||||
ACLCommonShareFingerprint2,
|
ACLCommonShareFingerprint2,
|
||||||
ACLCommonShareFingerprint3,
|
ACLCommonShareFingerprint3,
|
||||||
DownloadPathParentFingerprint
|
DownloadPathParentFingerprint,
|
||||||
|
SettingsStatusLoadFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {
|
override fun execute(data: BytecodeData): PatchResult {
|
||||||
@@ -53,11 +59,16 @@ class DownloadsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
//Download videos without watermark.
|
//Download videos without watermark.
|
||||||
val method3 = ACLCommonShareFingerprint3.result!!.mutableMethod
|
val method3 = ACLCommonShareFingerprint3.result!!.mutableMethod
|
||||||
method3.replaceInstructions(
|
method3.addInstructions(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
|
invoke-static {}, Lapp/revanced/tiktok/download/DownloadsPatch;->shouldRemoveWatermark()Z
|
||||||
|
move-result v0
|
||||||
|
if-eqz v0, :noremovewatermark
|
||||||
const/4 v0, 0x1
|
const/4 v0, 0x1
|
||||||
return v0
|
return v0
|
||||||
|
:noremovewatermark
|
||||||
|
nop
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
//Change the download path patch
|
//Change the download path patch
|
||||||
@@ -77,7 +88,6 @@ class DownloadsPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
if (targetOffset == -1) return PatchResultError("Can not find download path uri method.")
|
if (targetOffset == -1) return PatchResultError("Can not find download path uri method.")
|
||||||
//Change videos' download path.
|
//Change videos' download path.
|
||||||
val downloadPath = "$downloadPathParent/$downloadPathChild"
|
|
||||||
val downloadUriMethod = data
|
val downloadUriMethod = data
|
||||||
.toMethodWalker(DownloadPathParentFingerprint.result!!.method)
|
.toMethodWalker(DownloadPathParentFingerprint.result!!.method)
|
||||||
.nextMethod(targetOffset, true)
|
.nextMethod(targetOffset, true)
|
||||||
@@ -85,10 +95,11 @@ class DownloadsPatch : BytecodePatch(
|
|||||||
downloadUriMethod.implementation!!.instructions.forEachIndexed { index, instruction ->
|
downloadUriMethod.implementation!!.instructions.forEachIndexed { index, instruction ->
|
||||||
if (instruction.opcode == Opcode.SGET_OBJECT) {
|
if (instruction.opcode == Opcode.SGET_OBJECT) {
|
||||||
val overrideRegister = (instruction as OneRegisterInstruction).registerA
|
val overrideRegister = (instruction as OneRegisterInstruction).registerA
|
||||||
downloadUriMethod.replaceInstruction(
|
downloadUriMethod.addInstructions(
|
||||||
index,
|
index + 1,
|
||||||
"""
|
"""
|
||||||
const-string v$overrideRegister, "$downloadPath"
|
invoke-static {}, Lapp/revanced/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String;
|
||||||
|
move-result-object v$overrideRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -106,30 +117,11 @@ class DownloadsPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val method5 = SettingsStatusLoadFingerprint.result!!.mutableMethod
|
||||||
|
method5.addInstruction(
|
||||||
|
0,
|
||||||
|
"invoke-static {}, Lapp/revanced/tiktok/settingsmenu/SettingsStatus;->enableDownload()V"
|
||||||
|
)
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : OptionsContainer() {
|
|
||||||
private var downloadPathParent: String? by option(
|
|
||||||
PatchOption.StringListOption(
|
|
||||||
key = "mediaFolder",
|
|
||||||
default = "DCIM",
|
|
||||||
options = listOf(
|
|
||||||
"DCIM", "Movies", "Pictures"
|
|
||||||
),
|
|
||||||
title = "Media folder",
|
|
||||||
description = "The media root folder to download to.",
|
|
||||||
required = true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
private var downloadPathChild: String? by option(
|
|
||||||
PatchOption.StringOption(
|
|
||||||
key = "downloadPath",
|
|
||||||
default = "TikTok",
|
|
||||||
title = "Download path",
|
|
||||||
description = "Download path relative to the media folder.",
|
|
||||||
required = true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.extensions.or
|
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
@Name("inline-time-bar-wrapper-fingerprint")
|
|
||||||
@MatchingMethod("Lcom/google/android/apps/youtube/app/common/player/overlay/InlineTimeBarWrapper;", "onLayout")
|
|
||||||
@FuzzyPatternScanMethod(3)
|
|
||||||
@HideTimeAndSeekbarCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
object InlineTimeBarWrapperFingerprint : MethodFingerprint(
|
|
||||||
"V", AccessFlags.PROTECTED or AccessFlags.FINAL, listOf("Z", "I", "I", "I", "I"), listOf(
|
|
||||||
Opcode.SUB_INT_2ADDR,
|
|
||||||
Opcode.SUB_INT,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
Opcode.IF_NEZ,
|
|
||||||
Opcode.GOTO_16,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.SUB_INT,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -11,16 +11,22 @@ import org.jf.dexlib2.AccessFlags
|
|||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
|
|
||||||
@Name("time-counter-fingerprint")
|
@Name("time-counter-fingerprint")
|
||||||
@MatchingMethod("Lfez", "a")
|
@MatchingMethod("Lfga", "pk")
|
||||||
@FuzzyPatternScanMethod(3)
|
@FuzzyPatternScanMethod(3)
|
||||||
@HideTimeAndSeekbarCompatibility
|
@HideTimeAndSeekbarCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
object TimeCounterFingerprint : MethodFingerprint(
|
object TimeCounterFingerprint : MethodFingerprint(
|
||||||
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("J"), listOf(
|
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf(
|
||||||
Opcode.SGET_OBJECT,
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.IGET_WIDE,
|
||||||
Opcode.CONST_WIDE_16,
|
Opcode.CONST_WIDE_16,
|
||||||
Opcode.ADD_LONG_2ADDR,
|
Opcode.CMP_LONG,
|
||||||
|
Opcode.IF_LEZ,
|
||||||
|
Opcode.IGET_OBJECT,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_VIRTUAL,
|
||||||
Opcode.MOVE_RESULT_WIDE,
|
Opcode.MOVE_RESULT,
|
||||||
|
Opcode.IF_EQZ,
|
||||||
|
Opcode.GOTO,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -10,9 +10,10 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
|||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.patch.impl.BytecodePatch
|
import app.revanced.patcher.patch.impl.BytecodePatch
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.InlineTimeBarWrapperFingerprint
|
import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTappingFingerprint
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
||||||
|
import app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints.CreateVideoPlayerSeekbarFingerprint
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.framework.components.impl.StringResource
|
import app.revanced.patches.youtube.misc.settings.framework.components.impl.StringResource
|
||||||
@@ -26,7 +27,7 @@ import app.revanced.patches.youtube.misc.settings.framework.components.impl.Swit
|
|||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class HideTimeAndSeekbarPatch : BytecodePatch(
|
class HideTimeAndSeekbarPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
InlineTimeBarWrapperFingerprint, TimeCounterFingerprint
|
CreateVideoPlayerSeekbarFingerprint, SeekbarTappingFingerprint, TimeCounterFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {
|
override fun execute(data: BytecodeData): PatchResult {
|
||||||
@@ -40,10 +41,11 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val inlineTimeBarWrapperMethod = InlineTimeBarWrapperFingerprint.result!!.mutableMethod
|
val createVideoPlayerSeekbarMethod = CreateVideoPlayerSeekbarFingerprint.result!!.mutableMethod
|
||||||
|
|
||||||
inlineTimeBarWrapperMethod.addInstructions(
|
createVideoPlayerSeekbarMethod.addInstructions(
|
||||||
0, """
|
0, """
|
||||||
|
const/4 v0, 0x0
|
||||||
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
||||||
move-result v0
|
move-result v0
|
||||||
if-eqz v0, :hide_time_and_seekbar
|
if-eqz v0, :hide_time_and_seekbar
|
||||||
@@ -53,6 +55,20 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val seekbarTappingMethod = SeekbarTappingFingerprint.result!!.mutableMethod
|
||||||
|
|
||||||
|
seekbarTappingMethod.addInstructions(
|
||||||
|
0, """
|
||||||
|
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
||||||
|
move-result v0
|
||||||
|
if-eqz v0, :hide_time_and_seekbar
|
||||||
|
const/4 v0, 0x0
|
||||||
|
return v0
|
||||||
|
:hide_time_and_seekbar
|
||||||
|
nop
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
val timeCounterMethod = TimeCounterFingerprint.result!!.mutableMethod
|
val timeCounterMethod = TimeCounterFingerprint.result!!.mutableMethod
|
||||||
|
|
||||||
timeCounterMethod.addInstructions(
|
timeCounterMethod.addInstructions(
|
||||||
@@ -60,8 +76,7 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
invoke-static { }, Lapp/revanced/integrations/patches/HideTimeAndSeekbarPatch;->hideTimeAndSeekbar()Z
|
||||||
move-result v0
|
move-result v0
|
||||||
if-eqz v0, :hide_time_and_seekbar
|
if-eqz v0, :hide_time_and_seekbar
|
||||||
const-string v0, ""
|
return-void
|
||||||
return-object v0
|
|
||||||
:hide_time_and_seekbar
|
:hide_time_and_seekbar
|
||||||
nop
|
nop
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ class SponsorBlockBytecodePatch : BytecodePatch(
|
|||||||
AppendTimeFingerprint,
|
AppendTimeFingerprint,
|
||||||
PlayerInitFingerprint,
|
PlayerInitFingerprint,
|
||||||
PlayerOverlaysLayoutInitFingerprint,
|
PlayerOverlaysLayoutInitFingerprint,
|
||||||
ShortsPlayerConstructorFingerprint
|
ShortsPlayerConstructorFingerprint,
|
||||||
|
StartVideoInformerFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(data: BytecodeData): PatchResult {/*
|
override fun execute(data: BytecodeData): PatchResult {/*
|
||||||
|
|||||||
Reference in New Issue
Block a user