Kiwix is an offline reader for Web content. One of its main purposes is to make Wikipedia available offline. This is achieved by reading archives in the ZIM file format, a highly compressed open format with additional metadata.
This is the version for Android, with support versions ranging from 7.1 to 15.
Kiwix Android is written in Kotlin.
Starting from Android 11, Google has introduced a new very restrictive policy which concretly forbids Kiwix Play Store variant users to directly load ZIM files from internal/external storage. For the same reason, and still only in the Play Store variant, the storage scanning feature has been removed.
Actualy, 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 |
As a workaround, for ZIM files downloaded through third party apps, Kiwix users can use the file picker (in Kiwix library) to select these ZIM files... which then will be copied/moved to one of the the Kiwix app public directories (see above). An operation which can also be done manually.
Be careful, before uninstalling Kiwix, if the user wants to keep its ZIM files, he will have to move them outside of the app directory. Otherwise, the ZIM file might be removed during the process.
To use the full version of Kiwix and avoid to suffer of 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.
Starting from version 3.12.0
, Kiwix now offers two variants of the application:
- PlayStore version: App ID:
org.kiwix.kiwixmobile
. - Full version: App ID:
org.kiwix.kiwixmobile.standalone
available on our official repository.
Both variants have the different app id meaning these are two different apps.
What are the difference between these variants
The Play Store version has a limitation when it comes to scanning ZIM files from your storage, as mentioned in the Important Notes. In contrast, the full version of the application can scan storage and load ZIM files directly from other storage locations via the file picker, without requiring them to be copied or moved to the app-specific directory. While the core functionality of both versions remains the same, the primary difference lies in the ability to access ZIM files from outside the app-specific directory.
Why two variants
To avoid confusion between the Play Store version and the full version, we introduced separate app IDs for each variant. Using the same app ID for both versions caused conflicts with the Play Store, as it treated them as the same app. This resulted in scenarios where the Play Store 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 previous full version users move their content in this new app
For user who are using the previous full version of the application can download the new version of application from our official repository, and move the bookmarks by exporting them from the previous version and importing them into new version of the app, the options are available in the "Settings" screen. For the already downloaded library move the ZIM files from "Android/media/org.kiwix.kiwixmobile/" or "Android/data/org.kiwix.kiwixmobile/" from both internal and SD card to other storage locations before uninstalling the previous full version of the app, the new version of the application can load your all ZIM files available in your storage location. You just need to swipe down on the "Library" screen and it will scan your storage and load your all ZIM files in the application.
The migration is a one-time process. After completing it, you can directly download the new version of the application from our official repository, and it will update your current full version of the app when you install it.
Kiwix requires the following permissions to fully work:
ACCESS_FINE_LOCATION
: Required on devices running Android 12 and below to discover nearby devices when transferring ZIM files.NEARBY_WIFI_DEVICES
: Required on devices running Android 13 and above to discover nearby devices for transferring ZIM files.READ_EXTERNAL_STORAGE
: Required to access and read ZIM files stored on the device.WRITE_EXTERNAL_STORAGE
: Required to download ZIM files, export bookmarks, save notes, etc.POST_NOTIFICATIONS
: Required to display notifications for ongoing downloads, active hotspots, and the read-aloud feature.MANAGE_EXTERNAL_STORAGE
: Required on Android 11 and above to scan the storage and locate all ZIM files. This permission is only available in the full version of the application.
To build Kiwix Android, clone this repository and import (not open) the project with Android Studio.
If you prefer to build without Android Studio you must first set up
the Android SDK and then run the command: ./gradlew build
from the
root directory of the project. The project requires Java 17
to run,
Therefore set the Gradle JDK
to Java 17
.
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.
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.
- Libkiwix - Kotlin/Java binding for the core Kiwix library
- Dagger 2 - A fast dependency injector for Android and Java
- Retrofit - Retrofit turns your REST API into a Java interface
- OkHttp - An HTTP+SPDY client for Android and Java applications
- Mockito - Most popular Mocking framework for unit tests written in Java
- RxJava - Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.
- ObjectBox - Reactive NoSQL Database
- MockK - Kotlin mocking library that allows mocking of final classes by default.
- JUnit5 - The next generation of JUnit
- AssertJ - Fluent assertions for test code
- ZXing - Barcode scanning library for Java, Android
- Fetch - A customizable file download manager library for Android
Before contributing be sure to check out the CONTRIBUTION guidelines.
We currently have a series of automated Unit & Integration tests. These can be run locally and are also run when submitting a pull request.
Available communication channels:
- Slack: #android channel Get an invite
For more information, please refer to https://wiki.kiwix.org/wiki/Communication.