Important
You are viewing a fork of the original Obtainium project.
If you are looking for the original, proceed to ImranR98/Obtainium.
To view details about this fork, go to the Fork section.
Get Android app updates straight from the source.
Original by ImranR98 · Modified by deminearchiver
The repository you are currenly viewing deminearchiver/Obtainium is a fork of ImranR98/Obtainium.
In this section the primary differences and deviations compared to the original project are described.
Unfortunately, this fork does not provide any builds. If you want to use this version the app, you'll have to build it from source.
For the time being, it's recommended to use the default "debug" keystore for release builds, as redistribution of builds is not provided.
The redesign of the app is introduced through incremental adoption, which involves introducing changes gradually.
This version of the app features the all-new fresh and shiny Material 3 Expressive open-source design system created at Google.
The 2025 "Expressive" update the Material You design system received a big update, which made it look more polished and finished.
Currently, implementation of Material 3 Expressive design across the app is considered incomplete, but over time the support for the new design language will improve.
The design changes begin with refactoring the code for a certain UI element, then using legacy styling methods to achieve wanted looks. In order to fully embrace the new design language, it's needed to create new implementations for certain UI elements. This process is slow and tedious, hence the adoption of the new design language will be split a number of migration steps depending on the specific component's complexity. In the process of the redesign, the UI may looks incomplete, but it's the only way to properly apply design changes currently.
The app uses Markdown to display certain rich text messages, namely changelogs for tracked apps.
While not a part of the Material Design spec, a refresh of the default Markdown styles is urgently needed.
The priority of this change is low, because Markdown is rarely encountered throughout the app normally.
No significant changes were made to Markdown stylesheets yet, because the update is at the design stage.
This fork features important developer-facing changes, such as:
-
Differences in the process of building the app.
-
Updated tooling configurations:
- Removal of Docked support.
- Framework and SDK updates.
-
Code style updates:
- General improvement of code quality.
- Application of widely known best practices.
- Added support for EditorConfig.
-
Resolving feature deprecations (and introducing new ones).
-
Source code splitting via internal unpublished packages, such as custom implementations of layout, UI, platform interfaces, internationalization, assets.
Currently, there are a lot of changes not yet covered in this section, which means that this section is incomplete. The changelist will be updated and more changes will be described.
This section contains the list of projects that are planned to be implemented.
- Migrate to a new localization file structure
- Develop a new localization file structure to use with
slang - Create a Dart script which remaps
easy_localizationfiles to the new localization structure (to preserve some of the existing translations) - Intermediate steps (TBA)
- Start accepting localization contributions
- Develop a new localization file structure to use with
- Add the ability to require biometric authentication upon opening the app via the
local_authpackage - Cookie Manager - a way for users to obtain and store cookies for any website. The cookies will be used globally across the app for all web requests
Many Material widgets used still come from Flutter's Material library. The long-standing goal of this project is to get rid of the dependency on Flutter's Material library. It is considered "legacy" in the scope of this repository (it's not actually deprecated).
Here's a list of widgets that are planned to have a custom implementation:
- Switch (
Switch)- Support default style
- Support theming
- Checkbox (
Checkbox)- Support default style
- Support theming
- Radio button (
RadioButton)- Support default style
- Support theming
- Common buttons (
ButtonandToggleButton)- Support default style
- Support theming
- Icon buttons (
IconButtonandIconToggleButton)- Support default style
- Support theming
- Standard button group (
StandardButtonGroup)- One of the most complex widgets to implement, will probably require a custom render object. In that case children will be required to support dry layout.
- Connected button group (
ConnectedButtonGroup) - FAB (
FloatingActionButton) - FAB menu (
FloatingActionButtonMenu) - App bar (
AppBar)- Implement using existing
SliverAppBar - Improve title layout to account for actions
- Fully custom implementation (must use
SliverPersistentHeaderunder the hood)
- Implement using existing
- Loading indicator (
LoadingIndicator)- Port
androidx.graphics.shapesandandroidx.compose.material3.MaterialShapeslibraries - Use a placeholder implementation
- Create a complete implementation
- Port
- Progress indicators
- Linear progress indicator (
LinearProgressIndicator)- Use a placeholder implementation
- Flat shape (
LinearProgressIndicator) - Wavy shape (
LinearWavyProgressIndicator) - Implement complex transition logic (
LinearProgressIndicatorController)
- Circular progress indicator
- Use a placeholder implementation
- Flat shape (
CircularProgressIndicator) - Wavy shape (
CircularWavyProgressIndicator) - Implement complex transition logic (
CircularProgressIndicatorController)
- Linear progress indicator (
These changes are expected to not affect the user experience. They include various architecural and structural changes to the project.
Here's a tree-like checklist of the changes expected to be implemented in the near future:
- Migrate from
easy_localizationtoslanglocalization solution- Create workspace
obtainium_i18npackage - Set up
slangin the workspace package - Create a Dart script which migrates
easy_localizationtoslanglocalization files - Add tests for the migrated localizations
- Migrate application code to use
slanggenerated localizations - Completely remove the
easy_localizationdependency - Clean up
assets/translationsdirectory
- Create workspace
- Migrate from
httptodiopackage
The following list contains changes regarding the project's repository:
- Modernize issue temlates
- Create pull request templates
- Set up discussions
- Start accepting open-source contributions
- Consider choosing a different name for the app to further deviate from the original project
- Set up Renovate CLI
- Install Renovate GitHub app in this repository
- Create a website for the app
Obtainium allows you to install and update apps directly from their releases pages, and receive notifications when new releases are made available.
- Obtainium Wiki (repository)
- Obtainium 101 - Tutorial video
- AppVerifier - App verification tool (recommended, integrates with Obtainium)
- apps.obtainium.imranr.dev - Crowdsourced app configurations (repository)
- Side Of Burritos - You should use this instead of F-Droid | How to use app RSS feed - Original motivation for this app
- Website (repository)
- Source code
- APKPure
- Aptoide
- Uptodown
- Huawei AppGallery
- Tencent App Store
- CoolApk
- vivo App Store (CN)
- RuStore
- Farsroid
- Jenkins Jobs
- APKMirror (Track-Only)
Any other URL that returns an HTML page with links to APK files
You can find crowdsourced app configurations at apps.obtainium.imranr.dev.
If you can't find the configuration for an app you want, feel free to leave a request on the Discussions page.
Or, contribute some configurations to the website by creating a PR at ImranR98/apps.obtainium.imranr.dev.
For some sources, data is gathered using Web scraping and can easily break due to changes in website design. In such cases, more reliable methods may be unavailable.