Skip to content

ci: Match ReVanced repository standards #2516

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

Draft
wants to merge 337 commits into
base: compose-dev
Choose a base branch
from
Draft
Changes from all commits
Commits
Show all changes
337 commits
Select commit Hold shift + click to select a range
83b9573
docs(readme): minor fix to displaying url
validcube Jul 24, 2023
aec8cec
feat: download apps in patcher screen (#73)
CnC-Robert Jul 30, 2023
61de0b6
feat: show installed app in version selector
CnC-Robert Jul 30, 2023
6beb34b
ci: init
CnC-Robert Jul 30, 2023
272d911
fix(installer): progress tracking
Axelen123 Jul 31, 2023
55f2256
fix: don't store app list in parcel
CnC-Robert Jul 31, 2023
5cf5e87
ci(release): task naming consistency
validcube Aug 1, 2023
299aaa2
fix: library info not being embedded
Axelen123 Aug 1, 2023
379ce91
feat: finish implementing the sources system (#70)
Axelen123 Aug 3, 2023
1707a96
feat: improve bundle dialog UI
Axelen123 Aug 4, 2023
7e3c31c
chore: bump patcher
Axelen123 Aug 4, 2023
3f059d7
feat: switch to the new api (#75)
Axelen123 Aug 7, 2023
7aea947
feat: patch options UI (#80)
Axelen123 Aug 12, 2023
f6563b2
fix: permission error when using installed app
Axelen123 Aug 12, 2023
9586a9c
fix: patches not being reloaded
Axelen123 Aug 14, 2023
0f9a6f4
ci(release): no longer store keystore alias in secrets
PalmDevs Aug 17, 2023
ac4c7e0
ci(release): use correct `vars` context object
PalmDevs Aug 17, 2023
a0b9255
feat: store patched apps (#79)
CnC-Robert Aug 17, 2023
f01adf5
ci(release): migrate from `node12` to `node16`
validcube Aug 19, 2023
3cfa4ea
feat: more info for the select from application screen (#81)
Tyffhabwe Aug 23, 2023
2bb51c1
fix(deps): use correct work-runtime version string
Axelen123 Aug 26, 2023
c0badbe
build: updates (#85)
PatrykMis Aug 26, 2023
eeae46a
chore: bump kotlinx.serialization plugin and patcher
Axelen123 Sep 1, 2023
5369a25
docs: update badge's repository
validcube Sep 2, 2023
8bd73c3
ci(release): don't build when not necessary
validcube Sep 2, 2023
e6eb8ac
docs: update readme badges (#1227)
BenjaminHalko Sep 3, 2023
212db84
ci(config): appreciation for first-time contributors
validcube Sep 3, 2023
42e0346
feat: make bundles selectable (#1237)
Tyffhabwe Sep 4, 2023
0b0ba21
fix: providers.gradleProperty (#1223)
BenjaminHalko Sep 6, 2023
b4dfcf1
fix: minify crash on building release (#1245)
BenjaminHalko Sep 6, 2023
bf10af2
feat: root installation (#1243)
CnC-Robert Sep 9, 2023
fc577b4
chore: update dependencies (#1247)
PatrykMis Sep 15, 2023
9408857
fix: contributors screen fix (#1256)
BenjaminHalko Sep 15, 2023
6f2ca5b
fix: typo in string name `import_keystore_description` (#1273)
BenjaminHalko Sep 18, 2023
36de61a
ci: build pull requests (#1228)
BenjaminHalko Sep 21, 2023
4cb4ce2
feat: change appID and name of debug builds
BenjaminHalko Sep 21, 2023
e0f8d06
fix(ui): make entire patches view button selectable (#1271)
BenjaminHalko Sep 21, 2023
a86923a
fix: disable `WebView` history (#1278)
BenjaminHalko Sep 21, 2023
ee96c37
refactor: update progress onBackClick function (#1277)
BenjaminHalko Sep 21, 2023
cf71ea2
feat: implement Submit Issue button (#1276)
BenjaminHalko Sep 21, 2023
f79320c
fix: use ReVanced ring logo in about section (#1302)
BenjaminHalko Sep 22, 2023
65377ff
fix: Updates popup shows incorrect names (#1283)
BenjaminHalko Sep 24, 2023
63fd795
ci: Add release workflow (#1235)
BenjaminHalko Sep 25, 2023
0964f15
docs: init (#1224)
BenjaminHalko Sep 26, 2023
1f8341a
fix: remove misc.xml and kotlinc.xml
BenjaminHalko Sep 27, 2023
b8b2e74
chore: fully remove idea project files
Axelen123 Oct 1, 2023
ca3c9af
feat: remove dead help icons
Axelen123 Oct 1, 2023
f78b56e
feat(patch-selector): default patches selection (#1272)
Axelen123 Oct 1, 2023
e232044
chore: switch to revanced library and bump patcher (#1314)
Axelen123 Oct 5, 2023
6437f7b
feat(installer): adjust step icon size and alignment
Axelen123 Oct 5, 2023
39caad1
feat(installer): adjust arrow icon size
Axelen123 Oct 5, 2023
d8392ad
feat(settings): move experimental patches option to advanced
Axelen123 Oct 5, 2023
abf4d91
fix: use correct classes to determine option type
Axelen123 Oct 6, 2023
723f9cd
fix: delete temporary files (#1341)
Axelen123 Oct 7, 2023
608bac6
feat: use revanced api for changelogs
Axelen123 Oct 7, 2023
5762859
feat: add patches selector bottom sheet (#1360)
Axelen123 Oct 13, 2023
56a4a70
feat: settings migration (compose) (#1309)
BenjaminHalko Oct 13, 2023
8f6d720
refactor(downloaders): improve file system code (#1379)
Axelen123 Oct 14, 2023
8f54495
feat: armv7 warning
Axelen123 Oct 14, 2023
f5b3b29
feat: hide unfinished pages in release mode
Axelen123 Oct 14, 2023
4c1ad86
fix: broken logo in about page on release builds
Axelen123 Oct 14, 2023
cee2240
chore: bump compose
Axelen123 Oct 15, 2023
bf54d38
chore: bump patcher
Axelen123 Oct 15, 2023
212e55f
feat: add user agent (#1382)
BenjaminHalko Oct 16, 2023
5aefb3b
fix: hide patch button (#1284)
BenjaminHalko Oct 16, 2023
7ba00ca
refactor: move mount code to when block
Axelen123 Oct 17, 2023
c3af6ac
feat: selected app info page (#1395)
Axelen123 Oct 19, 2023
9df98ed
fix: use upsert when modifying installed apps
Axelen123 Oct 19, 2023
4b12ae1
fix: jvm signature clash error
Axelen123 Oct 20, 2023
18cfb56
fix: bundles not loading on Android 14
Axelen123 Oct 20, 2023
5290713
feat(patch-selector): remove TODO about an unplanned feature
Axelen123 Oct 20, 2023
32e8a37
fix: handle exceptions when checking for bundle updates
Axelen123 Oct 20, 2023
64ec73d
fix: more android 34 fixes
Axelen123 Oct 20, 2023
e70c10a
feat: add checkboxes to the downloaded apps page
Axelen123 Oct 20, 2023
65f8d38
feat: show toast when no patches are selected
Axelen123 Oct 20, 2023
50e8d1f
docs: clarify license
Axelen123 Oct 21, 2023
757840b
feat(bundles tab): add BackHandler
Axelen123 Oct 26, 2023
cc89784
fix: perform selected app operations in the correct order
Axelen123 Oct 26, 2023
6abaac2
chore: upgrade dependencies (#1401)
BenjaminHalko Oct 26, 2023
7d887c7
fix: use correct checksum
Axelen123 Oct 27, 2023
172604f
feat(installer): sign apk in patcher worker
Axelen123 Oct 27, 2023
123ae37
chore: add issue template (#1432)
BenjaminHalko Oct 28, 2023
7fe4724
feat: remember patch options (#1449)
Axelen123 Oct 31, 2023
25bd91d
feat(Settings): use SettingsListItem consistently and overall improve…
Ushie Nov 1, 2023
7741394
feat(NotificationCard): rewrite & consistent usage (#1426)
Ushie Nov 1, 2023
8df7f29
refactor(ui-components): deduplicate colors and move to settings folder
Axelen123 Nov 1, 2023
5fff0a2
fix: option state crash (#1456)
BenjaminHalko Nov 2, 2023
3c57762
feat(Installer): use BottomAppBar (#1428)
Ushie Nov 3, 2023
1a83315
feat(Changelogs): overall improvement (#1429)
Ushie Nov 3, 2023
1dc41ba
feat: check for updates on startup (#1462)
CnC-Robert Nov 5, 2023
59dacee
chore: bump patcher
Axelen123 Nov 6, 2023
ac561e7
feat: Use correct casing in module description
oSumAtrIX Nov 7, 2023
2bd8463
fix: parcel error for nullable types
Axelen123 Nov 15, 2023
62a5fce
feat(Contributors Screen): implement design from Figma (#1465)
Ushie Nov 19, 2023
bd9778a
feat(Update Screen): changelogs & handle states (#1464)
Ushie Nov 19, 2023
9cab919
fix: load patch bundles earlier
Axelen123 Nov 29, 2023
12b00e5
fix: specify `multithreadingDexFileWriter` in `PatcherOptions` (#1402)
BenjaminHalko Nov 29, 2023
de4e616
chore(deps): bump revanced patcher and library
Axelen123 Dec 1, 2023
a17a059
ci: caching with `gradle-build-action`
validcube Dec 2, 2023
8cd617e
chore(template): update label name for feature
validcube Dec 2, 2023
d9eb1c4
refactor: slight formatting of `build.gradle.kts`
validcube Dec 2, 2023
55c7800
build: bump Gradle to v8.5
validcube Dec 2, 2023
a8b9d93
docs: update revanced url
validcube Dec 2, 2023
d55abf5
feat(app-selector): show patchable installed apps first (#1496)
TheAabedKhan Dec 14, 2023
439f625
chore(deps): update jetpack compose
Axelen123 Dec 25, 2023
4fdd6bb
chore: upgrade AGP to `8.2.0` + migrate deprecated functions (#1574)
BenjaminHalko Dec 26, 2023
d9d7b98
feat: Purple default theme (#1601)
BenjaminHalko Dec 28, 2023
aa6e612
feat: Select bundle type before adding bundle (#1490)
Ushie Jan 4, 2024
b7cb6b9
feat: updater UI and code improvements (#1597)
Axelen123 Jan 5, 2024
3232bb1
feat: improve patcher UI (#1494)
CnC-Robert Jan 6, 2024
f38b31a
fix: progress bar not updating
CnC-Robert Jan 7, 2024
36c8f59
feat: Scrollbars (#1479)
Ushie Jan 7, 2024
c0f3d02
refactor: fix terminology and wording related to patches (#1623)
Axelen123 Jan 18, 2024
e186dfd
docs(security): init (#1612)
validcube Jan 20, 2024
4acef77
refactor: use consistent wording for the version compat check
Axelen123 Jan 20, 2024
0b9889e
fix: patch options reset button being broken
Axelen123 Jan 21, 2024
607d8b6
feat: add toast feedback to the bundle update button
Axelen123 Jan 21, 2024
39536c0
feat: Collapse ExtendedFAB on scroll (#1630)
Ushie Feb 3, 2024
16cdc7a
refactor: Disable update for dev build (#1673)
BenjaminHalko Feb 17, 2024
ef04186
fix(VersionSelector): use correct LazyColumn item key
Axelen123 Mar 5, 2024
088de60
chore: upgrade dependencies (#1670)
BenjaminHalko Mar 5, 2024
6709505
chore: Upgrade dependencies (#1761)
BenjaminHalko Mar 10, 2024
8d5d86f
feat: add social links (#1294)
BenjaminHalko Mar 13, 2024
5d7f9d1
feat: check if the version being used is the recommended version (#1675)
Axelen123 Mar 15, 2024
ca49d3a
feat: add external process runtime (#1799)
Axelen123 Mar 29, 2024
ce13422
fix: correctly patch apk files
Axelen123 Apr 3, 2024
ac47a7e
build(deps): bump plugin.serialization from 1.9.22 to 1.9.23 (#1811)
dependabot[bot] Apr 4, 2024
91ca5be
build(deps): bump libsu from 5.2.1 to 5.2.2 (#1810)
dependabot[bot] Apr 4, 2024
60ca901
build(deps): bump androidx.compose:compose-bom from 2024.02.02 to 202…
dependabot[bot] Apr 4, 2024
ab0682c
build(deps): bump androidx.compose.ui:ui-tooling from 1.6.3 to 1.6.4 …
dependabot[bot] Apr 4, 2024
afd6c5d
build(deps): bump aboutLibrariesGradlePlugin from 11.1.0 to 11.1.1 (#…
dependabot[bot] Apr 4, 2024
634d793
fix: crash caused by compose inlining bug
Axelen123 Apr 4, 2024
0df39a1
refactor: replace deprecated functions
Axelen123 Apr 5, 2024
2a1445d
build(deps): update ksp
Axelen123 Apr 5, 2024
ac0a036
refactor: fix more warnings
Axelen123 Apr 5, 2024
4e7d96e
feat: revert to blue theme colors
CnC-Robert May 22, 2024
6bfd909
feat: move update to notification card (#1917)
CnC-Robert May 27, 2024
1f671ab
fix: automatically focus search views
CnC-Robert May 27, 2024
413083c
fix(downloader): versions not loading correctly
CnC-Robert May 29, 2024
c7d183e
feat: rename debug build to `ReVanced Manager (dev)`
CnC-Robert Jun 23, 2024
16fea59
fix: scrolling in patch selector
CnC-Robert Jun 23, 2024
269fa79
feat: improve patcher screen labels
CnC-Robert Jun 23, 2024
75fcdb1
fix: use proper update icon
CnC-Robert Jun 25, 2024
5455cf2
feat: rename main bundle to `Default`
CnC-Robert Jun 25, 2024
a12c5c5
fix: add bounds checks in patch selector
Axelen123 Jul 2, 2024
1ce56af
feat: get bundle information from jar manifest (#2027)
Axelen123 Jul 2, 2024
47bdc69
refactor: Improve naming consistency in `libs.version.toml`
Ushie Jul 2, 2024
603a827
chore: Remove unused ARMv7 AAPT binary
Ushie Jul 2, 2024
71b5f53
feat: Improve initial update popup wording
Ushie Jul 2, 2024
fa13d4a
feat: Highlight links in Markdown
Ushie Jul 2, 2024
f197760
feat: Change "Update" to "Show" in Update Available notification
Ushie Jul 2, 2024
39fbb87
fix: Change the title in the Update screen from "Updates" to "Update"
Ushie Jul 2, 2024
d631331
feat: Improve device information in debugging section
Ushie Jul 2, 2024
9883dcd
fix: Use FAB instead of ListItem to patch in App Overview
Ushie Jul 2, 2024
d987ac6
feat: Add `isScrollingUp` support for ScrollState
Ushie Jul 2, 2024
e3bd8a8
feat: Add sensitivity to `isScrollingUp`
Ushie Jul 2, 2024
495100d
fix: Use the correct icon in API URL dialog
Ushie Jul 2, 2024
1bf004d
feat: Progressive AlertDialog for adding bundles
Ushie Jul 3, 2024
a0f1873
feat: Remove tag from changelog
Ushie Jul 3, 2024
397a1f8
Merge branch 'compose-dev' of https://github.com/ReVanced/revanced-ma…
Ushie Jul 3, 2024
d8248cc
fix: import bundles on another thread
Axelen123 Jul 3, 2024
8d3d500
feat: add ability to share debug logs
Axelen123 Jul 3, 2024
48fe3a7
fix: import export screen UX
Axelen123 Jul 3, 2024
a22158d
fix: crash when removing used bundles
Axelen123 Jul 4, 2024
ec0a077
feat: implement more patch option types (#2015)
Axelen123 Jul 4, 2024
f99cdfe
feat: improve UX for failed or missing bundles
Axelen123 Jul 4, 2024
b26fe30
Merge branch 'compose-dev' of https://github.com/ReVanced/revanced-ma…
Ushie Jul 4, 2024
7c7fb7b
feat: dont ask for root on launch
Axelen123 Jul 5, 2024
e6e043f
fix: cleanup advanced settings screen
Axelen123 Jul 5, 2024
6f9a984
fix: improve bundle page strings
Axelen123 Jul 5, 2024
032ca39
feat: Automatic language detection (#2032)
validcube Jul 5, 2024
3f4a234
fix: run props flow on correct dispatcher (#2035)
Axelen123 Jul 5, 2024
1ee1330
feat: improve the safeguards (#2038)
Axelen123 Jul 6, 2024
a995f43
fix: move battery warning to dashboard
Axelen123 Jul 6, 2024
36f864e
chore: update dependencies
Axelen123 Jul 6, 2024
f655a6e
ci: Bump dependencies to latest (#2039)
validcube Jul 7, 2024
40492b6
refactor: Use TextButton instead of FilledButton for consistency
validcube Jul 7, 2024
37e9630
fix: Inconsistent padding for battery optimisation warning
validcube Jul 7, 2024
b8a85c4
refactor: Use lastIndex
Ushie Jul 10, 2024
d39804f
Merge branch 'compose-dev' into fix/minor-issues
Ushie Jul 10, 2024
881b137
feat: Improve overall UI and fix inconsistencies (#2028)
Ushie Jul 10, 2024
563f2f3
fix: Remove unnecessary screen padding
Ushie Jul 17, 2024
42ef2ca
fix: Broken header padding in `AlertDialogExtended` when using an Icon
Ushie Jul 17, 2024
45f3204
feat: Improve custom API URL dialog (#2033)
validcube Jul 18, 2024
de6fddf
fix: android icon not loading in app selector
CnC-Robert Jul 20, 2024
2eca45d
fix: always use default patch selection if customization is disabled
Axelen123 Jul 20, 2024
641d518
build: Enable Gradle Configuration Cache (#2059)
validcube Jul 22, 2024
52a89b1
feat: Improve update setting tile titles
Ushie Jul 24, 2024
cdc69ea
fix: Support patching on ARMv7 by updating AAPT2 (#2084)
oSumAtrIX Jul 28, 2024
afc72ff
feat: Show manager update dialog (#2069)
Ushie Jul 28, 2024
4cbd480
feat: Add reset button to custom API (#2076)
Ushie Jul 29, 2024
f126fe9
fix: show available and selected patches in patch selector screen
CnC-Robert Jul 29, 2024
c18901c
feat: Improve unsupported patch warnings (#2066)
Ushie Jul 29, 2024
4257c32
fix: `ExtendedFloatingActionButton` not accessible by screen readers …
TheAabedKhan Aug 6, 2024
32f2710
fix: Turn off filters by default (#2079)
TheAabedKhan Aug 6, 2024
edc11b6
ci: Actually enable caching of Gradle
validcube Aug 7, 2024
936a9ef
refactor: Add parameters for custom rotation values in `ArrowButton`
Ushie Aug 7, 2024
e869db0
fix: Move temporary files outside of the cache directory (#2122)
kitadai31 Aug 12, 2024
e992a99
fix: remove the unique constraint for patch bundle names
Axelen123 Aug 12, 2024
747017a
feat: Improve Settings order (#2060)
validcube Aug 15, 2024
edb4e42
feat: Improve patch bundle screen (#2070)
Ushie Aug 16, 2024
10e7e4b
feat: Open the app-specific manage all files permission dialog (#2148)
kitadai31 Aug 18, 2024
2055400
feat: View bundle patches (#2065)
Ushie Aug 24, 2024
d201bdc
feat: Add installer status dialog (#1473)
oSumAtrIX Aug 29, 2024
f6f7238
feat(patcher): Improve installation (#2185)
aliernfrog Sep 19, 2024
697386c
fix: Match "Installation incompatible" dialog message with Flutter Ma…
kitadai31 Sep 30, 2024
b4c37e6
feat: Add haptic feedback (#1457)
BenjaminHalko Nov 6, 2024
cf32214
fix: only perform haptics on events
Axelen123 Nov 12, 2024
20c13ee
chore: update dependencies
Axelen123 Nov 13, 2024
0685479
feat: Make patch bundles list scrollable (#2322)
somnisomni Nov 22, 2024
31fb8b1
chore: Nitpick on misspelling of comment
validcube Nov 30, 2024
9dc716b
feat: switch to revanced api v4
Axelen123 Dec 12, 2024
2ec1c02
feat: Add downloader plugin system (#2041)
Axelen123 Dec 19, 2024
9916e4d
fix: Screen turns off while patching due to wrong WakeLock (#2147)
kitadai31 Dec 21, 2024
49f75f9
fix: process death resilience and account for android 11 bug (#2355)
Axelen123 Dec 22, 2024
8a20d8c
fix: contributors screen repository name
Axelen123 Dec 22, 2024
f9831d4
refactor: remove unnecessary function
Axelen123 Dec 23, 2024
5d3a81f
feat: switch to androidx.navigation (#2362)
Axelen123 Dec 23, 2024
cf3866f
fix: remove battery optimization notification if user grants the perm…
Axelen123 Dec 23, 2024
b81bd17
chore: add .kotlin to gitignore
Axelen123 Dec 23, 2024
9db3bd5
feat: Add confirm dialogs when toggling dangerous settings (#2072)
TheAabedKhan Dec 23, 2024
7644a74
feat: add required options screen (#2378)
Axelen123 Jan 3, 2025
fff1a41
refactor: use EventEffect for legacy import
Axelen123 Jan 4, 2025
0ab424b
fix: available updates dialog list item color
Axelen123 Jan 4, 2025
7433893
feat: Redesign the patches screen (#2381)
X1nto Jan 18, 2025
a762969
docs: Merge documentation from Flutter to Compose
validcube Jan 19, 2025
818dc09
build: Bump AGP to 8.8.0
validcube Jan 11, 2025
2aef678
fix: Offset badge
Ushie Jan 27, 2025
067020f
feat: Screen slide transition (#2396)
Ushie Jan 27, 2025
71b73a3
fix: show install button when installation has been cancelled
CnC-Robert Jan 29, 2025
242c457
chore: Update project's dependencies to latest
validcube Jan 29, 2025
cd06d36
build: Enable pseudo locale for debug variant
validcube Jan 29, 2025
3d23482
fix: improve keystore import error handling and show toast
CnC-Robert Jan 29, 2025
f348eba
ci: Generate release artifact provenance (#2324)
validcube Jan 29, 2025
1092188
feat: TopAppBar scroll behavior (#2397)
Ushie Jan 31, 2025
ede1ab5
feat: Reorder Import & Export settings (#2403)
Ushie Feb 1, 2025
e10e5e4
build(deps): bump the gradle-compose group with 16 updates (#2407)
dependabot[bot] Feb 1, 2025
1956982
feat: Improve APK file name formatting on save (#2421)
Ushie Feb 12, 2025
d5c63ea
fix: Use `compatible` rather than `support` when referring to patch c…
Ushie Feb 12, 2025
fc05f95
feat: Improve update screen design (#2487)
Ushie Apr 23, 2025
ee07621
fix: Do not poll battery optimization status (#2491)
kitadai31 Apr 23, 2025
d37ed05
feat: move plugin api to another repository
Axelen123 Apr 28, 2025
10001b4
feat: add network checks for features that require it
Axelen123 Apr 28, 2025
6e57a6e
fix: Ignore long click when already in delete mode
Ushie Apr 30, 2025
3d5c3b1
ci: Release Attestation
validcube May 1, 2025
0b1b54d
ci: Use burrunan/gradle-cache-action
validcube May 1, 2025
87a4ec9
ci: Update Gradle Wrapper Automaticaly
validcube May 1, 2025
22cb54a
ci: Merge dev to main
validcube May 1, 2025
c9ad1c1
ci: Gradle Cache
validcube May 1, 2025
55009b9
ci: Update attestation workflow v1 -> v2
validcube May 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
181 changes: 61 additions & 120 deletions .github/ISSUE_TEMPLATE/bug-issue.yml
Original file line number Diff line number Diff line change
@@ -1,120 +1,61 @@
name: 🐞 Bug report
description: Report a very clearly broken issue.
title: 'bug: <title>'
labels: [bug]
body:
- type: markdown
attributes:
value: |
# ReVanced Manager bug report

Important to note that your issue may have already been reported before. Please check for existing issues [here](https://github.com/revanced/revanced-manager/labels/bug).

- type: dropdown
attributes:
label: Type
options:
- Error while running the manager
- Error at runtime
- Cosmetic
- Other
validations:
required: true
- type: textarea
attributes:
label: Bug description
description: How did you find the bug? Any additional details that might help?
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Add the steps to reproduce this bug, including your environment.
placeholder: Step 1. Download some files. Step 2. ...
validations:
required: true
- type: textarea
attributes:
label: Android version
description: Android version used.
validations:
required: true
- type: textarea
attributes:
label: Manager version
description: Manager version used.
validations:
required: true
- type: textarea
attributes:
label: Target package name
description: App you tried to patch.
validations:
required: true
- type: textarea
attributes:
label: Target package version.
description: Version of the app you tried to patch.
validations:
required: true
- type: dropdown
attributes:
label: Installation type
options:
- Non-root
- Root
validations:
required: true
- type: textarea
attributes:
label: Patches selected.
description: Patches you selected for the app.
validations:
required: true
- type: textarea
attributes:
label: Device logs (exported using Manager settings).
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so there is no need for backticks.
render: shell
validations:
required: true
- type: textarea
attributes:
label: Installer logs (exported using Installer menu option) [unneeded if the issue is not during patching].
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so there is no need for backticks.
render: shell
validations:
required: false
- type: textarea
attributes:
label: Screenshots or video
description: Add screenshots or videos that show the bug here.
placeholder: Drag and drop the screenshots/videos into this box.
validations:
required: false
- type: textarea
attributes:
label: Solution
description: If applicable, add a possible solution.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add additional context here.
validations:
required: false
- type: checkboxes
id: acknowledgments
attributes:
label: Acknowledgments
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues; this is new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I properly filled out all of the requested information in this issue.
required: true
- label: The issue is solely related to ReVanced Manager and not caused by patches.
required: true
name: 🐞 Bug report
description: Create a new bug report.
title: 'bug: <title>'
labels: [bug]
body:
- type: markdown
attributes:
value: |
# ReVanced Manager bug report

Please check for existing issues [here](https://github.com/revanced/revanced-manager/labels/bug) before creating a new one.
- type: textarea
attributes:
label: Bug description
description: |
- Describe your bug in detail
- Add steps to reproduce the bug if possible (Step 1. Download some files. Step 2. ...)
- Add images and videos if possible
- List selected patches if applicable
validations:
required: true
- type: textarea
attributes:
label: Version of ReVanced Manager and version & name of application you tried to patch
validations:
required: true
- type: dropdown
attributes:
label: Installation type
options:
- Non-root
- Root
validations:
required: false
- type: textarea
attributes:
label: Device logs
description: Export logs in ReVanced Manager settings.
render: shell
validations:
required: true
- type: textarea
attributes:
label: Patcher logs
description: Export logs in "Patcher" screen.
render: shell
validations:
required: false
- type: checkboxes
attributes:
label: Acknowledgements
description: Your issue will be closed if you don't follow the checklist below!
options:
- label: This request is not a duplicate of an existing issue.
required: true
- label: I have chosen an appropriate title.
required: true
- label: All requested information has been provided properly.
required: true
- label: The issue is solely related to the ReVanced Manager
required: true
94 changes: 42 additions & 52 deletions .github/ISSUE_TEMPLATE/feature-issue.yml
Original file line number Diff line number Diff line change
@@ -1,52 +1,42 @@
name: ⭐ Feature request
description: Create a detailed feature request.
title: 'feat: <title>'
labels: [feature-request]
body:
- type: dropdown
attributes:
label: Type
options:
- Functionality
- Cosmetic
- Other
validations:
required: true
- type: textarea
attributes:
label: Issue
description: What is the current problem. Why does it require a feature request?
validations:
required: true
- type: textarea
attributes:
label: Feature
description: Describe your feature in detail. How does it solve the issue?
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Why should your feature should be considered?
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: Add additional context here.
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I filled out all of the requested information in this issue properly.
required: true
- label: The issue is related solely to the ReVanced Manager
required: true
name: ⭐ Feature request
description: Create a new feature request.
title: 'feat: <title>'
labels: [feature request]
body:
- type: markdown
attributes:
value: |
# ReVanced Manager feature request

Please check for existing feature requests [here](https://github.com/revanced/revanced-manager/labels/bug) before creating a new one.
- type: textarea
attributes:
label: Feature description
description: Describe your feature in detail.
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Explain why the lack of it is a problem.
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: In case there is something else you want to add.
validations:
required: false
- type: checkboxes
attributes:
label: Acknowledgements
description: Your issue will be closed if you don't follow the checklist below!
options:
- label: This request is not a duplicate of an existing issue.
required: true
- label: I have chosen an appropriate title.
required: true
- label: All requested information has been provided properly.
required: true
- label: The issue is solely related to the ReVanced Manager
required: true
2 changes: 1 addition & 1 deletion .github/config.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
firstPRMergeComment: >
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role.
❤️ Thank you for contributing to ReVanced Manager. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role.
38 changes: 0 additions & 38 deletions .github/workflows/analyze.yml

This file was deleted.

27 changes: 27 additions & 0 deletions .github/workflows/open_pull_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Open a PR to main

on:
push:
branches:
- dev
workflow_dispatch:

env:
MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`

jobs:
pull-request:
name: Open pull request
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Open pull request
uses: repo-sync/pull-request@v2
with:
destination_branch: main
pr_title: 'chore: ${{ env.MESSAGE }}'
pr_body: |
This pull request will ${{ env.MESSAGE }}.
pr_draft: true
57 changes: 28 additions & 29 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
@@ -1,45 +1,44 @@
name: PR Build
name: Build pull request

on:
pull_request:
paths:
paths:
- ".github/workflows/pr-build.yml"
- "android/**"
- "assets/**"
- "lib/**"

- "app/**"
- "gradle/**"
- "*.properties"
- ".kts"

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
# Make sure the release step uses its own credentials:
# https://github.com/cycjimmy/semantic-release-action#private-packages
persist-credentials: false
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'zulu'
- name: Setup Flutter
uses: subosito/flutter-action@v2
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
channel: 'stable'
cache: true
- name: Install Flutter dependencies
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
java-version: '17'
distribution: 'temurin'

- name: Cache Gradle
uses: burrunan/gradle-cache-action@v1

- name: Build with Gradle
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: flutter build apk --debug
run: ./gradlew assembleRelease --no-daemon -PnoProguard -PsignAsDebug

- name: Set env
run: echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV

- name: Add hash to APK
run: mv app/build/outputs/apk/release/app-release.apk revanced-manager-${{ env.COMMIT_HASH }}.apk

- name: Upload build
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: revanced-manager
path: build/app/outputs/flutter-apk/app-debug.apk
path: revanced-manager-${{ env.COMMIT_HASH }}.apk
52 changes: 30 additions & 22 deletions .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
@@ -1,50 +1,58 @@
name: "Release Build"
name: Release Build

on:
push:
tags:
- "v*"

jobs:
release:
build:
name: Build
runs-on: ubuntu-latest
permissions:
id-token: write
attestations: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: "11"
distribution: "zulu"
- uses: subosito/flutter-action@v2

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
channel: "stable"
- name: Set up Flutter
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
java-version: '17'
distribution: 'temurin'

- name: Cache Gradle
uses: burrunan/gradle-cache-action@v1

- name: Build with Gradle
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
run: flutter build apk
run: ./gradlew assembleRelease --no-daemon

- name: Sign APK
id: sign_apk
uses: ilharp/sign-android-release@v1
with:
releaseDir: build/app/outputs/apk/release
releaseDir: ./app/build/outputs/apk/release/
signingKey: ${{ secrets.SIGNING_KEYSTORE }}
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}

- name: Add version to APK
run: mv ${{steps.sign_apk.outputs.signedFile}} revanced-manager-${{ env.RELEASE_VERSION }}.apk
run: mv ${{ steps.sign_apk.outputs.signedFile }} revanced-manager-${{ env.RELEASE_VERSION }}.apk

- name: Attest
uses: actions/attest-build-provenance@v2
with:
subject-name: 'ReVanced Manager ${{ env.RELEASE_VERSION }}'
subject-path: revanced-manager-${{ env.RELEASE_VERSION }}.apk

- name: Publish release APK
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false
files: revanced-manager-${{ env.RELEASE_VERSION }}.apk
files: revanced-manager-${{ env.RELEASE_VERSION }}.apk
2 changes: 1 addition & 1 deletion .github/workflows/update-documentation.yml
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ jobs:
name: Dispatch event to documentation repository
if: github.ref == 'refs/heads/main'
steps:
- uses: peter-evans/repository-dispatch@v2
- uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }}
repository: revanced/revanced-documentation
18 changes: 18 additions & 0 deletions .github/workflows/update-gradle-wrapper.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Update Gradle wrapper

on:
schedule:
- cron: "0 0 1 * *"
workflow_dispatch:

jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@v1
with:
target-branch: dev
152 changes: 10 additions & 142 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,144 +1,12 @@
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.classpath
.project
.settings/

# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version

# packages file containing multi-root paths
.packages.generated

# Flutter/Dart/Pub related
**/doc/api/
**/*.g.dart
**/*.locator.dart
**/*.router.dart
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds

# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# macOS related
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/Flutter-Debug.xcconfig
**/macos/Flutter/Flutter-Release.xcconfig
**/macos/Flutter/Flutter-Profile.xcconfig

# Windows related
**/windows/flutter/ephemeral/
**/windows/**/*.suo
**/windows/**/*.user
**/windows/**/*.userosscache
**/windows/**/*.sln.docstates
**/windows/x64/
**/windows/x86/
**/windows/**/*.[Cc]ache
**/windows/**/!*.[Cc]ache/

# Web related
lib/generated_plugin_registrant.dart

# Coverage
coverage/

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock

# Firebase related
.firebase

# Dependency directories
node_modules/
.gradle
/local.properties
/.idea
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

# FVM
.fvm
.kotlin/
45 changes: 0 additions & 45 deletions .metadata

This file was deleted.

75 changes: 0 additions & 75 deletions .releaserc

This file was deleted.

6 changes: 0 additions & 6 deletions .run/main.dart.run.xml

This file was deleted.

91 changes: 0 additions & 91 deletions .vscode/tasks.json

This file was deleted.

1 change: 0 additions & 1 deletion CHANGELOG.md

This file was deleted.

58 changes: 41 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,55 @@
# 💊 ReVanced Manager
# ReVanced Manager (Compose Rewrite)

The official ReVanced Manager based on Flutter.
[![GitHub license](https://img.shields.io/github/license/revanced/revanced-manager)](../../blob/main/LICENSE)
[![GitHub last commit](https://img.shields.io/github/last-commit/revanced/revanced-manager/compose-dev)](https://github.com/ReVanced/revanced-manager/commits/compose-dev)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/w/revanced/revanced-manager/compose-dev)](https://github.com/ReVanced/revanced-manager/commits/compose-dev)

_(Yet another)_ rewrite of the ReVanced Manager using Kotlin and Jetpack Compose.

## Design system

In this rewrite, we are adopting the latest Material Design principles and guidelines by using Material 3 and Material You.

Material Design is a design system developed by Google that provides a unified visual language for building beautiful and consistent user interfaces across all platforms and devices. Material You is an extension of Material Design that provides even more customization options for users, making it possible for them to personalize their device and create a unique look and feel.

### Why Material 3?

* **Consistent design language**
* **Improved accessibility**
* **Better user experience**

By using Material 3 and Material You, we are ensuring that the app's user interface is consistent, customizable, accessible, and engaging for our users. This will help to improve the overall user experience and increase user satisfaction with the the manager.

## Technology stack

* Kotlin: Kotlin is a modern and concise programming language that is fully interoperable with Java and provides improved safety, readability, and maintainability compared to Java.
* Jetpack Compose: Jetpack Compose is a modern UI toolkit for Android development that allows developers to build beautiful and performant user interfaces using declarative programming. It provides a unified and efficient way of building UI that is well-integrated with the Android framework.

## Why Kotlin and Compose?

* **Improved safety:** Kotlin provides improved safety compared to Java, which reduces the likelihood of common programming mistakes that can cause security vulnerabilities or crashes.
* **Concise and readable code:** Kotlin's concise syntax and expressive type system make the code more readable, which makes it easier for developers to understand and maintain the codebase.
* **Better performance:** Jetpack Compose uses the power of the Android framework to provide smooth and fast performance, which enhances the user experience.
* **Modern and efficient UI development:** Jetpack Compose provides a modern and efficient way of building UI, which makes it easier for developers to create beautiful and performant user interfaces.

## 🔽 Download
To download latest Manager, go [here](https://github.com/revanced/revanced-manager/releases/latest) and install the provided APK file.

You can obtain ReVanced Manager by downloading it from either [revanced.app/download](https://revanced.app/download) or [GitHub Releases](https://github.com/ReVanced/revanced-manager/releases)

## 📝 Prerequisites
1. Android 8 or higher
2. Does not work on some armv7 devices

## 🔴 Issues
For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).
For a list of prerequisites, refer to [docs/0_prerequisites.md](docs/0_prerequisites.md)

## 💭 Discussion
If you wish to discuss the Manager, a thread has been made under the [#development](https://discord.com/channels/952946952348270622/1002922226443632761) channel in the Discord server, please note that this thread may be temporary and may be removed in the future.
## 🔴 Issues

For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).

## 🌐 Translation

[![Crowdin](https://badges.crowdin.net/revanced/localized.svg)](https://crowdin.com/project/revanced)

If you wish to translate ReVanced Manager, we're accepting translations on [Crowdin](https://translate.revanced.app)
We're accepting translations on [Crowdin](https://translate.revanced.app)

## 🛠️ Building Manager from source
1. Setup flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
2. Clone the repository locally
3. Add your github token in gradle.properties like [this](/docs/4_building.md)
4. Open the project in terminal
5. Run `flutter pub get` in terminal
6. Then `flutter packages pub run build_runner build --delete-conflicting-outputs` (Must be done on each git pull)
7. To build release apk run `flutter build apk`

For instructions on how to build ReVanced Manager from source, refer to [docs/4_building.md](docs/4_building.md)
77 changes: 77 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>

# 🔒 Security Policy

This document describes how to report security vulnerabilities for ReVanced Manager.

## 🚨 Reporting a Vulnerability

Please open an issue in our [advisory tracker](https://github.com/ReVanced/revanced-manager/security/advisories/new) or reach out privately to us on [Discord](https://discord.gg/revanced).

If a vulnerability is confirmed and accepted, you can join our [Discord](https://discord.gg/revanced) server to receive a special contributor role.

### ⏳ Supported Versions

| Version | Branch | Supported |
| --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
| ![Latest stable release](https://img.shields.io/github/v/release/ReVanced/revanced-manager?style=for-the-badge "Latest stable release") | main | :white_check_mark: |
| ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | dev | :white_check_mark: |
| ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | compose-dev | :white_check_mark: |
163 changes: 0 additions & 163 deletions analysis_options.yaml

This file was deleted.

13 changes: 0 additions & 13 deletions android/.gitignore

This file was deleted.

3 changes: 0 additions & 3 deletions android/Gemfile

This file was deleted.

92 changes: 0 additions & 92 deletions android/app/build.gradle

This file was deleted.

4 changes: 0 additions & 4 deletions android/app/src/debug/AndroidManifest.xml

This file was deleted.

59 changes: 0 additions & 59 deletions android/app/src/main/AndroidManifest.xml

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

12 changes: 0 additions & 12 deletions android/app/src/main/res/drawable-v21/launch_background.xml

This file was deleted.

12 changes: 0 additions & 12 deletions android/app/src/main/res/drawable/launch_background.xml

This file was deleted.

19 changes: 0 additions & 19 deletions android/app/src/main/res/values-night-v31/styles.xml

This file was deleted.

18 changes: 0 additions & 18 deletions android/app/src/main/res/values-night/styles.xml

This file was deleted.

20 changes: 0 additions & 20 deletions android/app/src/main/res/values-v31/styles.xml

This file was deleted.

4 changes: 0 additions & 4 deletions android/app/src/main/res/values/ic_launcher_background.xml

This file was deleted.

18 changes: 0 additions & 18 deletions android/app/src/main/res/values/styles.xml

This file was deleted.

4 changes: 0 additions & 4 deletions android/app/src/main/res/xml/file_paths.xml

This file was deleted.

4 changes: 0 additions & 4 deletions android/app/src/profile/AndroidManifest.xml

This file was deleted.

37 changes: 0 additions & 37 deletions android/build.gradle

This file was deleted.

6 changes: 0 additions & 6 deletions android/gradle.properties

This file was deleted.

11 changes: 0 additions & 11 deletions android/settings.gradle

This file was deleted.

1 change: 1 addition & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
211 changes: 211 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
import kotlin.random.Random

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.devtools)
alias(libs.plugins.about.libraries)
}

android {
namespace = "app.revanced.manager"
compileSdk = 35
buildToolsVersion = "35.0.1"

defaultConfig {
applicationId = "app.revanced.manager"
minSdk = 26
targetSdk = 35
versionCode = 1
versionName = "0.0.1"
vectorDrawables.useSupportLibrary = true
}

buildTypes {
debug {
applicationIdSuffix = ".debug"
resValue("string", "app_name", "ReVanced Manager (dev)")
isPseudoLocalesEnabled = true

buildConfigField("long", "BUILD_ID", "${Random.nextLong()}L")
}

release {
if (!project.hasProperty("noProguard")) {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}

if (project.hasProperty("signAsDebug")) {
applicationIdSuffix = ".debug"
resValue("string", "app_name", "ReVanced Manager Debug")
signingConfig = signingConfigs.getByName("debug")

isPseudoLocalesEnabled = true
}

buildConfigField("long", "BUILD_ID", "0L")
}
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

dependenciesInfo {
includeInApk = false
includeInBundle = false
}

packaging {
resources.excludes.addAll(listOf(
"/prebuilt/**",
"META-INF/DEPENDENCIES",
"META-INF/**.version",
"DebugProbesKt.bin",
"kotlin-tooling-metadata.json",
"org/bouncycastle/pqc/**.properties",
"org/bouncycastle/x509/**.properties",
))
jniLibs {
useLegacyPackaging = true
}
}

ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}

kotlinOptions {
jvmTarget = "17"
}

buildFeatures {
compose = true
aidl = true
buildConfig = true
}

android {
androidResources {
generateLocaleConfig = true
}
}

externalNativeBuild {
cmake {
path = file("src/main/cpp/CMakeLists.txt")
version = "3.22.1"
}
}
}

kotlin {
jvmToolchain(17)
}

dependencies {

// AndroidX Core
implementation(libs.androidx.ktx)
implementation(libs.runtime.ktx)
implementation(libs.runtime.compose)
implementation(libs.splash.screen)
implementation(libs.activity.compose)
implementation(libs.work.runtime.ktx)
implementation(libs.preferences.datastore)
implementation(libs.appcompat)

// Compose
implementation(platform(libs.compose.bom))
implementation(libs.compose.ui)
implementation(libs.compose.ui.preview)
implementation(libs.compose.ui.tooling)
implementation(libs.compose.livedata)
implementation(libs.compose.material.icons.extended)
implementation(libs.compose.material3)
implementation(libs.navigation.compose)

// Accompanist
implementation(libs.accompanist.drawablepainter)

// Placeholder
implementation(libs.placeholder.material3)

// HTML Scraper
implementation(libs.skrapeit.dsl)
implementation(libs.skrapeit.parser)

// Coil (async image loading, network image)
implementation(libs.coil.compose)
implementation(libs.coil.appiconloader)

// KotlinX
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.collection.immutable)
implementation(libs.kotlinx.datetime)

// Room
implementation(libs.room.runtime)
implementation(libs.room.ktx)
annotationProcessor(libs.room.compiler)
ksp(libs.room.compiler)

// ReVanced
implementation(libs.revanced.patcher)
implementation(libs.revanced.library)

// Downloader plugins
implementation(libs.plugin.api)

// Native processes
implementation(libs.kotlin.process)

// HiddenAPI
compileOnly(libs.hidden.api.stub)

// LibSU
implementation(libs.libsu.core)
implementation(libs.libsu.service)
implementation(libs.libsu.nio)

// Koin
implementation(libs.koin.android)
implementation(libs.koin.compose)
implementation(libs.koin.compose.navigation)
implementation(libs.koin.workmanager)

// Licenses
implementation(libs.about.libraries)

// Ktor
implementation(libs.ktor.core)
implementation(libs.ktor.logging)
implementation(libs.ktor.okhttp)
implementation(libs.ktor.content.negotiation)
implementation(libs.ktor.serialization)

// Markdown
implementation(libs.markdown.renderer)

// Fading Edges
implementation(libs.fading.edges)

// Scrollbars
implementation(libs.scrollbars)

// EnumUtil
implementation(libs.enumutil)
ksp(libs.enumutil.ksp)

// Reorderable lists
implementation(libs.reorderable)

// Compose Icons
implementation(libs.compose.icons.fontawesome)
}
63 changes: 63 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

-dontobfuscate

# Required for serialization to work properly
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
static <1>$Companion Companion;
}
-if @kotlinx.serialization.Serializable class ** {
static **$* *;
}
-keepclassmembers class <2>$<3> {
kotlinx.serialization.KSerializer serializer(...);
}
-if @kotlinx.serialization.Serializable class ** {
public static ** INSTANCE;
}
-keepclassmembers class <1> {
public static <1> INSTANCE;
kotlinx.serialization.KSerializer serializer(...);
}

# This required for the process runtime.
-keep class app.revanced.manager.patcher.runtime.process.* {
*;
}
# Required for the patcher to function correctly
-keep class app.revanced.patcher.** {
*;
}
-keep class brut.** {
*;
}
-keep class org.xmlpull.** {
*;
}
-keep class kotlin.** {
*;
}
-keep class org.jf.** {
*;
}
-keep class com.android.** {
*;
}
-keep class app.revanced.manager.plugin.** {
*;
}

-dontwarn com.google.auto.value.**
-dontwarn java.awt.**
-dontwarn javax.**
-dontwarn org.slf4j.**
-dontwarn it.skrape.fetcher.*
-dontwarn com.google.j2objc.annotations.*

-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
429 changes: 429 additions & 0 deletions app/schemas/app.revanced.manager.data.room.AppDatabase/1.json

Large diffs are not rendered by default.

78 changes: 78 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<permission
android:name="app.revanced.manager.permission.PLUGIN_HOST"
android:protectionLevel="signature"
android:label="@string/plugin_host_permission_label"
android:description="@string/plugin_host_permission_description"
/>

<uses-permission android:name="app.revanced.manager.permission.PLUGIN_HOST" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<application
android:name=".ManagerApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:largeHeap="true"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.ReVancedManager"
android:enableOnBackInvokedCallback="true"
tools:targetApi="34">

<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.ReVancedManager">

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".plugin.downloader.webview.WebViewActivity" android:exported="false" android:theme="@style/Theme.WebViewActivity" />

<service android:name=".service.InstallService" />
<service android:name=".service.UninstallService" />

<service
android:name="androidx.work.impl.foreground.SystemForegroundService"
android:foregroundServiceType="specialUse"
android:exported="false"
tools:node="merge">
<property
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="patching"
/>
</service>

<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// IRootService.aidl
package app.revanced.manager;

// Declare any non-default types here with import statements

interface IRootSystemService {
IBinder getFileSystemService();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// IPatcherEvents.aidl
package app.revanced.manager.patcher.runtime.process;

// Interface for sending events back to the main app process.
oneway interface IPatcherEvents {
void log(String level, String msg);
void patchSucceeded();
void progress(String name, String state, String msg);
// The patching process has ended. The exceptionStackTrace is null if it finished successfully.
void finished(String exceptionStackTrace);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// IPatcherProcess.aidl
package app.revanced.manager.patcher.runtime.process;

import app.revanced.manager.patcher.runtime.process.Parameters;
import app.revanced.manager.patcher.runtime.process.IPatcherEvents;

interface IPatcherProcess {
// Returns BuildConfig.BUILD_ID, which is used to ensure the main app and runner process are running the same code.
long buildId();
// Makes the patcher process exit with code 0
oneway void exit();
// Starts patching.
oneway void start(in Parameters parameters, IPatcherEvents events);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// Parameters.aidl
package app.revanced.manager.patcher.runtime.process;

parcelable Parameters;
6 changes: 6 additions & 0 deletions app/src/main/assets/root/module.prop
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
id=__PKG_NAME__-ReVanced
name=__LABEL__ ReVanced
version=__VERSION__
versionCode=0
author=ReVanced
description=Mounts the patched APK on top of the original one
40 changes: 40 additions & 0 deletions app/src/main/assets/root/service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/system/bin/sh
DIR=${0%/*}

package_name="__PKG_NAME__"
version="__VERSION__"

rm "$DIR/log"

{

until [ "$(getprop sys.boot_completed)" = 1 ]; do sleep 5; done
sleep 5

base_path="$DIR/$package_name.apk"
stock_path="$(pm path "$package_name" | grep base | sed 's/package://g')"
stock_version="$(dumpsys package "$package_name" | grep versionName | cut -d "=" -f2)"

echo "base_path: $base_path"
echo "stock_path: $stock_path"
echo "base_version: $version"
echo "stock_version: $stock_version"

if mount | grep -q "$stock_path" ; then
echo "Not mounting as stock path is already mounted"
exit 1
fi

if [ "$version" != "$stock_version" ]; then
echo "Not mounting as versions don't match"
exit 1
fi

if [ -z "$stock_path" ]; then
echo "Not mounting as app info could not be loaded"
exit 1
fi

mount -o bind "$base_path" "$stock_path"

} >> "$DIR/log"
38 changes: 38 additions & 0 deletions app/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html.
# For more examples on how to use CMake, see https://github.com/android/ndk-samples.

# Sets the minimum CMake version required for this project.
cmake_minimum_required(VERSION 3.22.1)

# Declares the project name. The project name can be accessed via ${ PROJECT_NAME},
# Since this is the top level CMakeLists.txt, the project name is also accessible
# with ${CMAKE_PROJECT_NAME} (both CMake variables are in-sync within the top level
# build script scope).
project("prop_override")

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
#
# In this top level CMakeLists.txt, ${CMAKE_PROJECT_NAME} is used to define
# the target library name; in the sub-module's CMakeLists.txt, ${PROJECT_NAME}
# is preferred for the same purpose.
#
# In order to load a library into your app from Java/Kotlin, you must call
# System.loadLibrary() and pass the name of the library defined here;
# for GameActivity/NativeActivity derived applications, the same library name must be
# used in the AndroidManifest.xml file.
add_library(${CMAKE_PROJECT_NAME} SHARED
# List C/C++ source files with relative paths to this CMakeLists.txt.
prop_override.cpp)

# Specifies libraries CMake should link to your target library. You
# can link libraries from various origins, such as libraries defined in this
# build script, prebuilt third-party libraries, or Android system libraries.
target_link_libraries(${CMAKE_PROJECT_NAME}
# List libraries link to the target library
android
log)
62 changes: 62 additions & 0 deletions app/src/main/cpp/prop_override.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Library for overriding Android system properties via environment variables.
//
// Usage: LD_PRELOAD=prop_override.so PROP_dalvik.vm.heapsize=123M getprop dalvik.vm.heapsize
// Output: 123M
#include <string>
#include <cstring>
#include <cstdlib>
#include <dlfcn.h>

// Source: https://android.googlesource.com/platform/system/core/+/100b08a848d018eeb1caa5d5e7c7c2aaac65da15/libcutils/include/cutils/properties.h
#define PROP_VALUE_MAX 92
// This is the mangled name of "android::base::GetProperty".
#define GET_PROPERTY_MANGLED_NAME "_ZN7android4base11GetPropertyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_"

extern "C" typedef int (*property_get_ptr)(const char *, char *, const char *);
typedef std::string (*GetProperty_ptr)(const std::string &, const std::string &);

char *GetPropOverride(const std::string &key) {
auto envKey = "PROP_" + key;

return getenv(envKey.c_str());
}

// See: https://android.googlesource.com/platform/system/core/+/100b08a848d018eeb1caa5d5e7c7c2aaac65da15/libcutils/properties.cpp
extern "C" int property_get(const char *key, char *value, const char *default_value) {
auto replacement = GetPropOverride(std::string(key));
if (replacement) {
int len = strnlen(replacement, PROP_VALUE_MAX);

strncpy(value, replacement, len);
return len;
}

static property_get_ptr original = NULL;
if (!original) {
// Get the address of the original function.
original = reinterpret_cast<property_get_ptr>(dlsym(RTLD_NEXT, "property_get"));
}

return original(key, value, default_value);
}

// Defining android::base::GetProperty ourselves won't work because std::string has a slightly different "path" in the NDK version of the C++ standard library.
// We can get around this by forcing the function to adopt a specific name using the asm keyword.
std::string GetProperty(const std::string &, const std::string &) asm(GET_PROPERTY_MANGLED_NAME);


// See: https://android.googlesource.com/platform/system/libbase/+/1a34bb67c4f3ba0a1ea6f4f20ac9fe117ba4fe64/properties.cpp
// This isn't used for the properties we want to override, but property_get is deprecated so that could change in the future.
std::string GetProperty(const std::string &key, const std::string &default_value) {
auto replacement = GetPropOverride(key);
if (replacement) {
return std::string(replacement);
}

static GetProperty_ptr original = NULL;
if (!original) {
original = reinterpret_cast<GetProperty_ptr>(dlsym(RTLD_NEXT, GET_PROPERTY_MANGLED_NAME));
}

return original(key, default_value);
}
Loading