Conversation
# [1.1.0-dev.1](v1.0.0...v1.1.0-dev.1) (2025-07-03) ### Features * Add play store downloader ([#10](#10)) ([38c6aa4](38c6aa4))
# [1.1.0-dev.2](v1.1.0-dev.1...v1.1.0-dev.2) (2025-07-03) ### Bug Fixes * Fix release workflow ([847bcdb](847bcdb))
# [1.1.0-dev.3](v1.1.0-dev.2...v1.1.0-dev.3) (2025-07-03) ### Bug Fixes * Fix release workflow (again) ([5bde601](5bde601))
# [1.1.0-dev.4](v1.1.0-dev.3...v1.1.0-dev.4) (2025-07-03) ### Bug Fixes * Add gradle sha256 checksum ([f259821](f259821))
# [1.1.0-dev.5](v1.1.0-dev.4...v1.1.0-dev.5) (2025-07-04) ### Bug Fixes * Correctly removing bundle attributes from manifest ([6433d98](6433d98))
|
The repository name should be changed to |
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
# [1.1.0-dev.6](v1.1.0-dev.5...v1.1.0-dev.6) (2025-07-04) ### Bug Fixes * Showing progress if downloading an APK + minor fixes ([d46f002](d46f002))
Axelen123
left a comment
There was a problem hiding this comment.
The -downloader suffix seems unnecessary since the downloaders are inside the downloaders folder.
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
...ader/src/main/kotlin/app/revanced/manager/plugin/downloader/apkmirror/APKMirrorDownloader.kt
Outdated
Show resolved
Hide resolved
# [1.1.0-dev.7](v1.1.0-dev.6...v1.1.0-dev.7) (2025-07-08) ### Bug Fixes * Refactor of shared module + minor fixes ([5f6c7e5](5f6c7e5))
|
Should the downloader APK file name start with |
|
Yes, as it is scoped specifically for ReVanced Manager |
# [1.1.0-dev.8](v1.1.0-dev.7...v1.1.0-dev.8) (2025-07-08) ### Bug Fixes * Prefixing APKs with `revanced-manager-` ([f4c91f0](f4c91f0))
|
We should probably change names to a better naming convention, like: "ReVanced Manager v1.2.3.apk" instead of "revanced-manager-v1.2.3.apk" For downloaders, I mentioned the naming question in another place i don't remember but i pinged the relevant parties |
Is this blocking merge into main? What should be the naming convention for downloaders? |
|
Personally, I would like to see the following changes:
Here are some issues and questions to consider:
|
I do not remember "discussions" on Discord. Discord is too volatile for me. Please rehearse me.
I mentioned the issue in the comment:
People will call downloaders plugins, and plugins downloaders, people will ask what plugins exist, when only downloaders exist, people will say plugin, but some will not understand downloaders are meant, terminology here is extremely confusing and this issue is reflected by the code as well. Do we add "plugin" in the name of downloaders, do we use them in packages, do we omit them? This issue even bleeds to the UI. One section "plugins" which only mentions "downloaders"? What is the point of that. In my opinion this abstraction may come at a later point in time if we plan any other pluggable systems apart from downloaders. Even the current abstraction is invalid. Right now there is no interface for plugins, only downloaders, therefore there exists no abstraction for plugins. If you'd want to "plan" ahead for plugins, you'd need to create an interface for plugins and implement it in the downloader API. E.g: interface IPlugin { val: name, ... } Less abstraction if possible is good. As of now I don't see any direction manager would head to that would call for the need of IPlugin and therefore no abstraction for it. It isn't only easier in code and UI, but also for users as there is no confusion between those two terms that would be used for the very same thing interchangeably (e.g. the same issue with bundle vs patches).
Even worse! The UI suggests other plugins exist. Yet, the only that does is downloaders. This term has no use both, in code, nor to the user.
You misunderstand me. We once discussed that one APK shipping multiple downloaders scales better than one APK per downloader for the reason of API having to serve only one downloader just like one patches file instead of adding a new entry everytime a new downloader or patch is added. For this reason one downloader APK would for example be called "ReVanced downloaders" because ReVanced is the publisher of the APK, just like its called "ReVanced Patches". Brosssh would call his APK "Brosssh downloaders". Here is where naming is a problem. Refer to my comment to this regard. (Read below before your reply to this)
How would Brossh call theirs then? Also the name is suggestive of downloaders downloading ReVanced Manager which doesn't make sense when instead it downloads APKs (e.g. ReVanced Manager APK downloaders). If you decide for a name, we'll need reasoning on why its chosen. (Read below before you reply to this)
Well, that can be said for "ReVanced downloaders" too, because in ReVanced context is it unambiguous. This naming scheme would allow what i said above, e.g. Brossh downloaders, whereas "ReVanced Manager downloaders" wouldn't. However "ReVanced downloaders" is quite unspecific, whereas "Brossh downloaders" doesn't even mention ReVanced at all. A verbose "correct" name could be "ReVanced Manager APK downloaders" whereas others would choose "Brosssh ReVanced Manager APK downloaders" for example. Not sure how to proceed from here on, a lot of brainstorming, maybe chatgpt can come up with something. Here is chatgpts take: 1. Guiding principles
2. Proposed naming convention
This keeps “APK” explicit to avoid confusion, and keeps “downloaders” plural since it scales. 3. Handling redundancy ("ReVanced ReVanced …")
This mirrors how open-source ecosystems work (e.g. “JetBrains Kotlin Plugin” vs. “Foo Kotlin Plugin”). 4. Internal package namingFor consistency and readability:
If 5. Summary
This avoids ambiguity (“Downloader” vs. “APK Downloader”), avoids redundancy (“ReVanced ReVanced…”), and scales to third-party publishers. I'd be okay with chatgpts reasoning here, except maybe "apkdownloaders" since we call them "downloaders" |
Discord search sucks, so I am not going to try to find it. It is best to keep the discussion here on Github so it won't get brought up again, since I can't be bothered to discuss this a third time.
Having the term plugin in Kotlin/Android package names doesn't generate confusion by itself. Plugins are named by their developers, not us. They will simply choose a name that they think makes sense for their project regardless of what we think. For UI, see below.
I don't think we are going to have other plugins in the future. We do not need an interface for plugins right now nor does the use of the term plugin imply that we need one.
Refer to the image in my previous comment. If we replaced "Plugins" with downloaders, a user who is not familiar with the system would have questions like "Why are there no downloaders here?" or "How do I get/enable downloaders?". By using the term "plugin", it is more clear/obvious that they are external software that you have to look for. This problem would be worse if we decide to ship builtin downloaders, since users might think that the builtin ones are the only ones you can use even though that is not the case.
It has been a while since I made that comment. I didn't like having multiple downloaders in the same Apk before because it didn't feel right, but now I have a good argument as for why we shouldn't. Having multiple patches in the same bundle makes a lot of sense. The reason why it doesn't for downloaders is because APK sources are far less numerous compared to the possible modifications you could make to an Apk. The ability to share code is also not a justification, because this repo demonstrates that you can share code even if you have multiple Apks. Regarding the RV API, I plan on delegating almost all of the update checking logic to the plugin itself. Developers can implement updating via that API or use an external store such as Obtainium or F-Droid. Obtainium only requires you to make releases on Github and it will handle the rest, so we are not burdening plugin devs here. The benefit here is that we are not forcing developers to use one thing in particular.
This is just a concept and can be changed if needed. If you still think having multiple downloaders in the same Apk is a good idea or you don't like my plan with updates, please open a separate issue so we can unblock this PR. The name of this monorepo can still be discussed here though.
The individual downloaders can be named after their Apk source just like we are doing now in this repo. The naming of a monorepo containing multiple downloaders is up to the author, not us.
The individual Apk names in this repo are fine to me, and they can also be used by third parties if they desire. Naming the monorepo itself is trickier, but I don't have a better idea than the one we are already using in this PR. |
The "confusion" is causing them choosing arbitrarily between using "plugin" or not in the package name. For devs and users alike using two terms for the same thing is redundant and confusing. If you instead omit "plugin", all devs will be able to choose "downloader" as the term and call it that way without having to decide to use plugin, downloader or both.
Bingo. No other plugins, so why not just have downloaders. Remove the "plugin" terminology if you don't have any use for it, other than downloaders.
This is not a problem. You solve this by: In the UI show a label that says "you don't have any downloaders installed" or similar. The terminology "plugin" is thus redundant to convey that downloaders are external components that plug into manager.
I am not sure what you mean "APK sources are far less numerous". You mean there are only a couple of sources that provide APK files? Not only is a scale like this something you shouldn't consider, nor is it small. There are countless of APK sources, from users, decentral systems, stores and probably many more in the future. You should design the system for an array of N and not a fixed count. Also, even 2 sources justify a single APK file. It is scalable as well as we merely add a new downloader to the APK and push, and it would be available to the user.
It involves gradle, and it also duplicates the shaded library code, if e.g. i update a downloader, others wouldn't benefit from the library code updates as its separate, so if there's a bug in the lib, you'd need to update all single APK files. One APK shipping multiple downloaders means, user only needs to subscribe to the author of choice, and the author handles the rest, e.g. new downloaders, updates etc. You can STILL ship one downloader per APK just fine for any reason you want, this is not changed at all.
It is okay to design an API for update checking in downloader as long as you can implement the API so that the "official" method is to check for updates from ReVanced API. E.g. an interface "downloadAvailable()" and you implement it with a call to revanced API. However now that update checking is done in the downloader itself, each downloader would have to duplicate implementations of checking for updates when one central code could do that, e.g each downloader contracts with manager with an API so that manager can call the check function to check if the downloader has an update. The downloader would for example provide an API URL that returns a response that manager contracted with so that it checks for an update instead of downloaders implementing that code every time.
Before manager is merged to main this needs to be done though, otherwise you have breaking API and itll be much more difficult for this to be realized. Given that, there is no need to "unblock" this PR before manager is merged to main.
I am asking for a naming scheme, I know that they can be named whatever, however we have to decide on a format.
Imo all are kinda mid, but this one is the best. That said: " ReVanced Manager APK downloaders" contains e.g. "APKMirror downloader". ReVanced omits . |
# [1.1.0-dev.9](v1.1.0-dev.8...v1.1.0-dev.9) (2026-02-19) ### Features * Merge downloaders and update to new API ([#20](#20)) ([c7c1869](c7c1869))
# [1.1.0-dev.10](v1.1.0-dev.9...v1.1.0-dev.10) (2026-02-23) ### Bug Fixes * Specify correct artifact paths ([1954601](1954601))

This pull request will Merge branch
devtomain.