Top Related Projects
📱The official Wikipedia app for Android!
Material design file manager for Android
AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.
Quick Overview
Kiwix-android is an open-source Android application that allows users to read Wikipedia and other online content offline. It provides access to a wide range of educational content without the need for an internet connection, making it particularly useful in areas with limited connectivity or for users who want to save on data usage.
Pros
- Enables offline access to Wikipedia and other educational content
- Supports multiple languages and content types (e.g., books, videos)
- Free and open-source, allowing for community contributions and customization
- Regularly updated with new features and improvements
Cons
- Large file sizes for content downloads can be challenging for users with limited storage
- Initial setup and content download process can be time-consuming
- May not always have the most up-to-date information compared to online sources
- Limited search functionality compared to online Wikipedia
Getting Started
To get started with Kiwix-android:
- Download the Kiwix app from the Google Play Store or F-Droid.
- Open the app and navigate to the "Library" section.
- Browse available content or use the search function to find specific topics.
- Download desired content (ZIM files) for offline access.
- Once downloaded, you can access the content without an internet connection.
For developers interested in contributing to the project:
- Fork the repository on GitHub: https://github.com/kiwix/kiwix-android
- Clone your forked repository to your local machine.
- Set up Android Studio and import the project.
- Make your changes and submit a pull request for review.
Competitor Comparisons
📱The official Wikipedia app for Android!
Pros of Wikipedia Android app
- Direct access to live Wikipedia content, ensuring up-to-date information
- Integrated editing features for contributing to Wikipedia articles
- Seamless integration with Wikimedia's ecosystem and services
Cons of Wikipedia Android app
- Requires internet connection for most functionalities
- Larger app size due to more features and live content access
- May consume more data and battery when browsing articles
Code comparison
Kiwix Android:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kiwix)
setupToolbar()
loadZimFile()
}
Wikipedia Android app:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setupToolbar()
loadMainPage()
initializeEditing()
}
The code snippets show that while both apps have similar basic setup, the Wikipedia app includes additional functionality for editing and loading live content, reflecting its broader feature set and online-focused approach. Kiwix, on the other hand, focuses on loading offline ZIM files, emphasizing its offline capabilities.
Material design file manager for Android
Pros of AmazeFileManager
- More versatile file management features, including cloud storage integration and root access
- Active community with frequent updates and contributions
- Supports a wider range of file operations and customization options
Cons of AmazeFileManager
- Larger app size due to more features, potentially impacting device storage
- May have a steeper learning curve for users due to its extensive functionality
- Not specifically optimized for offline content consumption like Kiwix-Android
Code Comparison
AmazeFileManager (Java):
public void openFile(final HybridFileParcelable baseFile) {
if (baseFile.isDirectory()) {
computeScroll();
loadlist(baseFile.getPath(), false, OpenMode.FILE);
} else {
FileUtils.openFile(baseFile, mainActivity, getPrefs());
}
}
Kiwix-Android (Kotlin):
private fun openArticle(articleUrl: String) {
webViewCallback?.let {
it.loadUrl(articleUrl)
if (articleUrl.startsWith("file:")) {
webView?.webViewClient = KiwixWebViewClient(it, this)
}
}
}
The code snippets show different approaches to file handling. AmazeFileManager focuses on general file management, while Kiwix-Android is tailored for opening and displaying offline content.
AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.
Pros of Anki-Android
- More active community with frequent updates and contributions
- Extensive customization options for flashcard creation and study
- Robust synchronization with AnkiWeb for cross-platform usage
Cons of Anki-Android
- Steeper learning curve for new users due to complex features
- Larger app size and potentially higher resource usage
Code Comparison
Anki-Android (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homescreen);
CompatHelper.setupNotificationChannel(this);
}
Kiwix-Android (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
handleLocaleCheck();
}
Both projects use similar Android development practices, but Anki-Android tends to have more complex class structures and custom views due to its extensive feature set. Kiwix-Android focuses on efficient content delivery and offline access, resulting in simpler code organization.
Anki-Android is better suited for users seeking a powerful, customizable flashcard study tool, while Kiwix-Android excels in providing offline access to educational content with a more straightforward user experience.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME


Kiwix Android
Kiwix is an offline reader for Web content, primarily designed to make Wikipedia available offline. It reads archives in the ZIM file format, a highly compressed open format with additional metadata. This is the Android version of Kiwix, with support versions ranging from 7.1 to 15. The app is written in Kotlin.
Important Notes
Starting from Android 11, Google introduced a restrictive policy that affects the Kiwix Play Store variant. Users can no longer directly load ZIM files from internal or external storage. The storage scanning feature has also been removed in the Play Store variant.
Actually, Kiwix Play Store variant can only directly scan/read ZIM files in reserved app directories:
Directory name | Storage path | Readable by File manager |
---|---|---|
Internal public | storage/0/Android/media/org.kiwix.kiwixmobile/ | Yes |
Internal private | storage/0/Android/data/org.kiwix.kiwixmobile/ | No |
External public | storage/sdcard-name/Android/media/org.kiwix.kiwixmobile/ | Yes |
External private | storage/sdcard-name/Android/data/org.kiwix.kiwixmobile/ | No |
Workaround
For ZIM files downloaded through third-party apps, users can use the file picker in Kiwix to select and move these files to one of the Kiwix app's public directories (see above). This operation can be also done manually.
Be careful: Before uninstalling Kiwix, move ZIM files outside the app directory to avoid deletion.
To use the full version of Kiwix and avoid facing this restriction, you can download it directly from the official repository or use IzzyOnDroid.
We understand that this restriction may cause inconvenience, but it is necessary to comply with the Play Store policies and ensure a smooth user experience. We recommend using the official version of the app available on our website to access the complete set of features.
App variants
Starting from version 3.12.0, Kiwix is available in two variants:
- Google Play version using application id
org.kiwix.kiwixmobile
- Full version using application id
org.kiwix.kiwixmobile.standalone
Differences
Google Play version: Limited to scanning and opening ZIM files from reserved app directories. Full version: Can load ZIM files from any storage location using the file picker.
Why two variants?
To avoid confusion between the Google Play version and the full version, we introduced dedicated application ids (one for each variant). Using the same application id for both versions caused conflicts with the Google Play Store, as it treated them as the same app. This resulted in scenarios where Google Play would prompt updates for the full version. If users updated through the Play Store, they would lose advanced file management capabilities (such as scanning storage or directly opening ZIM files using the file picker).
This separation ensures clarity for users and prevents undesirable behavior.
How to move content between two variants?
Bookmarks: Export and reimport them via the "Settings" menu.
ZIM files: Move them to or from the reserved app directories Android/media/org.kiwix.kiwixmobile/
or
Android/data/org.kiwix.kiwixmobile/
. This might have to be done for both internal storage and SD card. Kiwix can detect automatically all ZIM files available in your storage. You just need to swipe down in the local "Library" screen and
it will scan your storage and recognize all your ZIM files.
Android permissions needed
Kiwix requires the following permissions to fully work:
ACCESS_FINE_LOCATION
: For device discovery on Android 12 and below.NEARBY_WIFI_DEVICES
: For device discovery on Android 13 and above.READ_EXTERNAL_STORAGE
: To access ZIM files.WRITE_EXTERNAL_STORAGE
: To download ZIM files and export bookmarks.POST_NOTIFICATIONS
: For notifications.MANAGE_EXTERNAL_STORAGE
: For storage scanning on Android 11 and above (full version only).
Build instructions
- Clone this repository.
- Import the project with Android Studio Narwhal Canary build.
- Set the Gradle JDK to Java 17.
- Run ./gradlew build from the root directory.
Kiwix Android is a multi-module project, in 99% of scenarios you will want to build the app
module in the debug
configuration. If you are interested in our custom apps, they have their own repo kiwix-android-custom.
Release
We have an automatic version code generation system based on the current date. However, you can override this by setting the environment variable KIWIX_ANDROID_RELEASE_DATE
to a specific date in the YYYY-MM-DD
format. This will use the provided date for the version code calculation instead of the current date.
ABI Splitting for APKs
By default, ABI
splitting is disabled. In newer Gradle versions, when uploading a .aab
file, ABI
splitting must remain disabled.
However, if you need to generate separate APKs for different ABIs, you can enable ABI
splitting by setting the APK_BUILD="true"
environment variable.
This variable should only be set when building an APK. If you set this variable and attempt to generate a .aab
file, the build will fail due to Gradle's new enhancements.
Libraries Used
- ð Libkiwix - Kotlin/Java binding for the core Kiwix library.
- ð¡ï¸ Dagger 2 - Dependency injector for Android and Java.
- ð Retrofit - Turns REST API into a Java interface.
- ð OkHttp - HTTP client for Android and Java.
- ð Mockito - Mocking framework for unit tests.
- â¡ RxJava - Reactive Extensions for the JVM.
- ðï¸ ObjectBox - Reactive NoSQL Database.
- ð MockK - Kotlin mocking library.
- 𧪠JUnit5 - Next-generation JUnit.
- ð¥ Fetch - File download manager library for Android.
- 𧪠AssertJ - Fluent assertions for test code.
- ð· ZXing - Barcode scanning library for Java, Android.
Contributing
Before contributing check out the CONTRIBUTION. We have automated Unit & Integration tests that run locally and on pull requests.
Communication
- Slack: #android channel Get an invite
For more information, please refer to https://wiki.kiwix.org/wiki/Communication.
Support
If you're enjoying using Kiwix, drop a âï¸ on the repo!
License
Top Related Projects
📱The official Wikipedia app for Android!
Material design file manager for Android
AnkiDroid: Anki flashcards on Android. Your secret trick to achieve superhuman information retention.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot