



Kiwix Android
Kiwix is an offline reader for Web content. One of its main purposes is to make Wikipedia available offline. This is achieved by reading the content of a file in the ZIM format, a highly compressed open format with additional metadata.
This is the version for Android, with support versions ranging from 7.1 to 13.
Important Note: Starting from Android 11, the storage scanning
feature has been restricted in the Play Store
variant
due to Play Store policies. This means that users running Android 11
and above will not be able to load ZIM files from internal/external
storage directly within the app if they have downloaded Kiwix from the
Google Play Store. This restriction is in place to comply with the
Play Store policies. The Play Store variant of Kiwix does not require
the MANAGE_EXTERNAL_STORAGE
permission anymore, which is necessary
to scan storage and access ZIM files at arbitrary locations.
Therefore, the storage scanning functionality is not
available in this variant anymore. For already downloaded ZIM files, You can copy
them to the Android/media/org.kiwix.kiwixmobile/
folder or you can use file picker to select the
ZIM files from storage and it will copy/move the ZIM files in this folder based on your choice
, and the application will read them.
Before uninstalling the application, please ensure that you move all your ZIM files
from this folder, as they will be automatically deleted when the application is uninstalled
or if the application data is cleared. To use the full version of Kiwix
and benefit of the ZIM file picker feature, 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.
Possible paths for play store version which supports for the scanning/reading ZIM files.
Storage path | Viewable outside kiwix(in File manager) | Could be scanned by Kiwix |
---|---|---|
storage/0/Android/media/org.kiwix.kiwixmobile/ | Yes | Yes |
storage/0/Android/data/org.kiwix.kiwixmobile/ | No | Yes |
storage/sdcard-name/Android/media/org.kiwix.kiwixmobile/ | Yes | Yes |
storage/sdcard-name/Android/data/org.kiwix.kiwixmobile/ | No | Yes |
Kiwix Android is written in Kotlin
App permissions
Our application requests the following permissions, which are necessary for its functionality:
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.
Build instructions
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.
Libraries Used
- 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
Contributing
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.
Communication
Available communication channels:
- Slack: #android channel Get an invite
For more information, please refer to https://wiki.kiwix.org/wiki/Communication.