Building an open source Android app means writing your code in a public repository under a recognized FOSS license, using only free and open source dependencies, and publishing through a channel like F-Droid or GitHub releases rather than a closed, proprietary store alone. The technical process of writing the app itself doesn’t change much, what changes is licensing, dependency choices, and how the project gets documented and distributed.
Open source Android development has real momentum heading into 2026, driven by growing developer interest in digital sovereignty and reduced dependence on proprietary platforms, a conversation that gained real traction through the “Keep Android Open” discussions circulating across developer communities. This guide covers what actually changes when you build an app to be genuinely open source, not just public on GitHub.
Many developers assume making an app open source simply means flipping a repository’s visibility from private to public, and that assumption is what trips up a surprising number of otherwise well-built apps once they try to reach a real audience through a dedicated open source channel like F-Droid. Genuine open source Android development touches licensing, dependency selection, and build reproducibility, decisions that are far easier to make correctly from the start than to retrofit onto an app already built around assumptions that don’t hold up under review.
An open source Android app is one whose complete source code is publicly available under a recognized Free and Open Source Software (FOSS) license, allowing anyone to view, modify, and redistribute the code under the terms that license defines. This is a meaningfully higher bar than simply making a GitHub repository public. A genuinely open source app also needs a clear license file, FOSS-only dependencies, and build instructions someone else could actually follow to compile the app themselves from source.
This distinction between “public code” and “genuinely open source” matters because it’s exactly where a lot of well-intentioned developers fall short without realizing it. A project can have thousands of lines of visible, readable code on GitHub and still fail every substantive requirement of true open source status, no license file at all, a build process that only works on the original developer’s machine, or a dependency chain quietly including proprietary components nobody thought to check. Meeting the fuller definition takes deliberate effort at each step covered below, not just the decision to make a repository visible to the public.
The MIT license is a permissive open source license, letting anyone use, modify, and redistribute your code, including in proprietary, closed-source projects, with minimal restrictions beyond preserving the original copyright notice.
The Apache 2.0 license is a permissive license similar to MIT but with added patent protection, explicitly granting users a license to any patents the original author holds that are relevant to the code, a meaningful legal safeguard for larger or more complex projects.
The GPL (General Public License) is a copyleft license requiring that any derivative work also be released under the same license, keeping the code and any modifications permanently open, while the AGPL extends this same requirement to software running as a network service, not just distributed code.
|
Factor |
MIT |
Apache 2.0 |
GPL/AGPL |
|
Permissiveness |
Very permissive |
Permissive with patent protection |
Copyleft, restrictive |
|
Can be used in closed-source projects |
Yes |
Yes |
No, derivatives must stay open |
|
Patent protection |
No |
Yes |
Yes (GPL v3) |
|
Best for |
Libraries, maximum adoption |
Larger projects needing patent clarity |
Projects wanting to guarantee permanent openness |
F-Droid specifically requires your app to use a license recognized on the official Free Software Foundation or OSI list, and vague or custom licensing terms are one of the more common reasons a submission gets rejected or delayed during review.
Choosing between these three categories comes down to one core question worth answering honestly before writing any code: do you want to guarantee your project and everything built on top of it stays open forever, or are you comfortable with someone potentially building a closed-source product using your code as a foundation. Neither answer is wrong, but they lead to genuinely different license choices, and picking a license reactively after the fact, once contributors or forks already exist under a different assumption, creates real friction that’s much harder to resolve than settling the question upfront.
Host your complete, up-to-date source code in a public repository, GitHub or GitLab are the most common choices, with real, working code rather than placeholder files, since reviewers and potential contributors need to verify the actual app matches what’s published. Include a LICENSE file at the root of the repository and copyright notices in your file headers, both genuinely required by F-Droid’s inclusion policy and good practice regardless of where you eventually distribute the app.
This might sound like an obvious first step, but it’s worth being explicit about what “real, working code” actually means in practice. A repository that hasn’t been updated in months, or one containing an older version that no longer matches what’s actually running in production, undermines the entire point of publishing source code in the first place. Treating the public repository as the genuine source of truth for the project, not a periodic snapshot updated whenever convenient, is what actually makes an open source release meaningful rather than symbolic.
Audit every dependency your app relies on and confirm each one is itself open source, since including even one proprietary or binary-only library disqualifies an app from F-Droid’s official repository entirely. Firebase and Google Mobile Services are specifically called out as non-FOSS dependencies that F-Droid does not accept, which means an app built around Firebase for backend services needs a separate build flavor without those dependencies if it wants to remain eligible for F-Droid distribution. This is a genuinely different constraint than typical Android development, where Firebase is often the default backend choice covered in our guide to best Android app development tools, and it’s worth planning around from the very start of a project rather than discovering the conflict after building around a dependency that later has to be removed.
Write a README that explains what the app does, how to build it from source, and how to contribute, since this documentation is what actually lets someone besides you use, verify, or improve the project. Include a CONTRIBUTING file outlining how you’d like pull requests submitted and issues reported, and a clear code of conduct if you expect meaningful outside contribution, since undocumented expectations are a common source of friction once real contributors start showing up.
Good documentation for an open source Android app specifically needs to answer questions a closed-source project’s internal documentation never has to address, since your audience includes people who’ve never met you and have no shared context about your codebase’s conventions or history. Explaining not just how to build the app, but why specific architectural decisions were made, helps a new contributor understand the codebase quickly enough to make a genuinely useful contribution rather than submitting a change that technically works but conflicts with the project’s actual design intentions.
Configure your build process so it runs consistently through command-line tools like Gradle, without requiring a proprietary IDE to compile successfully, since F-Droid’s build servers compile from source using command-line tools directly. Automating your build through CI/CD, and testing that a clean build from scratch actually reproduces the same result locally before submitting anywhere, catches reproducibility issues early rather than discovering them during a formal review process. Maintaining a clean Git history with consistently tagged releases matters specifically here too, since F-Droid’s build system relies directly on Git tags for versioning.
Reproducibility deserves more explanation than it usually gets, since it’s a genuinely different concern than simply “does the app build without errors.” A build is reproducible when compiling the exact same source code, under the same conditions, on a completely different machine, produces a bit-for-bit identical result. This matters enormously for trust in an open source context specifically, since it lets anyone verify that the binary actually being distributed corresponds exactly to the source code that’s publicly available, with no hidden differences or undisclosed modifications slipped in between the two.
Decide whether to distribute through F-Droid, Google Play, or both, since each channel has genuinely different requirements and a different audience. F-Droid requires the app to be built and signed by F-Droid’s own infrastructure using your source code directly, meaning an app already installed from a different source can’t upgrade in place without first being uninstalled, a real, practical consideration worth planning around if you’re launching on both channels simultaneously.
This signing distinction is worth understanding clearly before choosing a distribution strategy. Android treats an app signed with a different key as a fundamentally different app, even if the underlying code and version number are identical, which is why a user who first installed your app from GitHub releases signed with your own key can’t simply receive an automatic update once the same app becomes available on F-Droid signed with F-Droid’s key instead. Communicating this clearly to your users, and picking one primary distribution channel per install source rather than assuming seamless portability between them, avoids a confusing update experience nobody anticipated.
|
Factor |
F-Droid |
Google Play |
|
Dependency requirements |
FOSS-only, no Firebase or GMS |
No restrictions |
|
Build process |
F-Droid builds and signs from source |
Developer builds and signs directly |
|
Audience |
Privacy and open-source focused users |
General mainstream audience |
|
Review focus |
License verification, dependency audit |
Content policy, security scanning |
|
App signing |
F-Droid’s own key |
Your own signing key |
Many open source Android apps distribute through both channels simultaneously, maintaining a Google Play flavor with full functionality and a separate FOSS-only flavor for F-Droid, a common enough pattern that Android’s build system supports it directly through product flavors rather than requiring two entirely separate codebases.
Respond to pull requests and issues in a reasonable timeframe, since an open source project that goes silent on contributor activity quickly stops attracting new contributors regardless of how good the underlying code actually is. Engaging directly in F-Droid’s own community channels, its forums and chat spaces, also helps if you’re specifically targeting inclusion there, since the packaging team and broader community can offer real, practical feedback on why a submission might be stalling before it becomes a formal rejection.
Setting realistic expectations about response time upfront, even something as simple as a note in your CONTRIBUTING file about how often you check pull requests, manages contributor expectations far better than silence does. A contributor who submits a well-considered pull request and hears nothing for months has every reason to assume the project is abandoned and move on, while the same contributor given a realistic timeframe upfront is far more likely to wait patiently and remain engaged with the project long term.
If you’re weighing whether an open source release model fits your broader Android project, our guide on how to build an Android app step by step covers the foundational development process this guide builds on top of.
No, publishing your source code under a recognized FOSS license on GitHub or GitLab already makes an app open source, F-Droid is simply one distribution channel that specifically caters to open source Android apps with its own additional requirements.
Review timelines vary based on the volunteer packaging team's current workload and how cleanly your submission meets the inclusion requirements, license clarity, FOSS-only dependencies, working build instructions, upfront, with well-prepared submissions generally moving through review more smoothly than ones requiring back-and-forth clarification.
Submit your details and our team will reach out to discuss how we can bring your app or software idea to life.
Your request has been successfully submitted. Our team will be in touch with you shortly.
This window will close automatically.